2

AdminColntroller を使用して管理ページ (MVC 5) を作成しています。

[Authorize(Roles = "Admin")]
public class AdminController : ApplicationBaseController
{
    public ActionResult Index()
    {
        return View();
    }
}

シングルページアプリケーションとして実装したいので、アクセスを保護したい管理Web APIへのクライアント側のajax呼び出しを行います。

[RoutePrefix("api/admin")]
[Authorize(Roles = "admin")]
public class AdminApiController : ApiController
{
    [Route("echo")]
    public HttpResponseMessage GetEcho()
    {
        return Request.CreateResponse(HttpStatusCode.OK, new {Result = "Hello World"});
    }
}

これは、管理ビューから作成している ajax 呼び出しです。

<script>
    jQuery.ajax("https://example.com/api/admin/echo").done(function(data) {
        console.log(data);
    }).fail(function(a,b,c) {
        console.log(a);
    });
</script>

これにより、エラー (fail() メソッド) がスローされます: 「この要求に対して承認が拒否されました。」理由がわかりません - 私のユーザーは管理者の役割を持っています (そのため、管理者ページにアクセスすることさえできます)。メソッド[Authorize]から削除しGetEcho()てその中にブレークポイントを設定すると、正しいユーザー オブジェクトが表示されます。私が間違っていることはありますか?

4

2 に答える 2

2

あなたが抱えている問題は、MVCコントローラーに対して、これがあるということです:

[Authorize(Roles = "Admin")]

APIコントローラーに対して、これがあります:

[Authorize(Roles = "admin")]

ロール チェックでは、大文字と小文字が区別されます。Adminの代わりにAPI コントローラーを使用するように変更adminすると、問題が解決するはずです。

于 2016-02-03T02:03:43.510 に答える
-1

API リクエストでは、常に認証データまたはユーザー トークン (使用する認証方法に基づく) を使用する必要があります。

プレーンなjQueryでは、次のようになります

$.ajax({ beforeSend: function (xhr) { xhr.setRequestHeader("ownToken", authToken);

于 2016-02-02T21:47:24.433 に答える