AngularJSで、アプリケーション/データ/イベントフォルダ内のイベント(jsonファイル)を一覧表示するホームページを設定しようとしています。IIS Expressを使用してAngularJSプロジェクトで403エラーが発生する
eventsApp.factory('eventData', function ($resource) {
var resource = $resource('/app/data/event/:id', { id: '@id' }, { "getAll": { method: "GET", isArray: true, params: { something: "foo" } } });
return {
getEvent: function (eventId) {
return resource.get({
id: eventId
});
},
typeOf: function (obj) {
return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
},
getAllEvents: function() {
return resource.query();
},
save: function (event) {
return resource.save(event);
}
};
EventList.htmlは次のようになります:
<div>
<h1>Events</h1>
<hr/>
<hr/>
<ul class="thumbnails">
<li ng-repeat="event in events|orderBy:sortorder" class="span5">
<event-thumbnail/>
</li>
</ul>
</div>
私のルートは次のようになります。EventDataのサービスはこのようになります
'use strict';
eventsApp.controller('EventListController',
function EventListController($scope, $location, eventData) {
$scope.events = eventData.getAllEvents();
})
:コントローラ、EventListControllerは、次のようになります
'use strict';
var eventsApp = angular.module('eventsApp', ['ngResource', 'ngRoute'])
.config(function ($routeProvider) {
$routeProvider.when('/newEvent',
{
templateUrl: '/app/templates/NewEvent.html',
controller: 'EditEventController'
});
$routeProvider.when('/eventDetails/:eventId',
{
templateUrl: '/app/templates/EventDetails.html',
controller: 'EventController'
});
$routeProvider.when('/profile',
{
templateUrl: '/app/templates/EditProfile.html',
controller: 'EditProfileController'
});
$routeProvider.when('/events',
{
templateUrl: '/app/templates/EventList.html',
controller: 'EventListController'
});
$routeProvider.otherwise({ redirectTo: '/events' });
});
(別のWebAPIのプロジェクトで)WebAPIのコントローラは、EventController.csは、次のようになります。
public class EventController : ApiController
{
public JToken Get(string id = null)
{
if (id==null)
{
return GetAllJsonEventsAsArray();
}
return GetSingleJsonFile(id);
}
private JArray GetAllJsonEventsAsArray()
{
var path = System.Web.Hosting.HostingEnvironment.MapPath("/");
var contents = "";
foreach (var file in System.IO.Directory.GetFiles(path + "..app/data/event/"))
{
contents += System.IO.File.ReadAllText(file) + ",";
}
return JArray.Parse("[" + contents.Substring(0, contents.Length - 1) + "]");
}
を最後に、WebApiConfig.csは次のようになります。私はhttp://localhost:49403/app/#/eventsにアクセスしようとする
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
私はエラーが表示されます:GET http://localhost:49403/app/data/event/ 403(禁止)
誰でもこれを助けることができますか?どんな助けでも大歓迎です。
コントローラのルートが角度のルートと競合しています。角度と.Netの往復の間の衝突を扱うここに大量の記事があります。 –
403エラーはほとんどの場合、アクセス権のないものにアクセスしようとしているときに発生します。 AngularからAPI呼び出しを行っている間にAPIをデバッグできましたか?はいの場合、どのコード行でも例外がスローされますか? – Sujith
エイミー、ルーティング問題のディスカッションへのリンクを投稿できますか?私の検索は役に立たないものは何も出てこない。 –