かみそりビューから呼び出されたwebapiメソッドが、許可されていないときにログインページを返さないように、mvc / webapiプロジェクトを構成するにはどうすればよいですか?
そのMVC5アプリケーションには、JavaScriptを介した呼び出し用のWebApiコントローラーもあります。
以下の2つの方法
[Route("api/home/LatestProblems")]
[HttpGet()]
public List<vmLatestProblems> LatestProblems()
{
// Something here
}
[Route("api/home/myLatestProblems")]
[HttpGet()]
[Authorize(Roles = "Member")]
public List<vmLatestProblems> mylatestproblems()
{
// Something there
}
次の角度コードを介して呼び出されます:
angular.module('appWorship').controller('latest',
['$scope', '$http', function ($scope,$http) {
var urlBase = baseurl + '/api/home/LatestProblems';
$http.get(urlBase).success(function (data) {
$scope.data = data;
}).error(function (data) {
console.log(data);
});
$http.get(baseurl + '/api/home/mylatestproblems')
.success(function (data) {
$scope.data2 = data;
}).error(function (data) {
console.log(data);
});
}]
);
したがって、私はログインしておらず、最初のメソッドは正常にデータを返します。2番目のメソッドは、(success関数で)ログインページに相当するデータを返します。つまり、[Authorize]でスタンプされたコントローラアクションをリクエストし、ログインしていなかった場合にmvcで取得できるもの。
ログインしているかどうかに基づいてユーザーに異なるデータを表示できるように、401を無許可で返したいです。理想的には、ユーザーがログインしている場合、コントローラーのユーザープロパティにアクセスできるようにして、そのメンバーに固有のデータを返すことができるようにします。
更新:以下の提案のいずれも機能しなくなったため(IdentityまたはWebAPIの変更)、問題を説明するgithubに未加工の例を作成しました。