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() 方法):“此请求的授权已被拒绝。” 我不明白为什么 - 我的用户有一个角色 Admin(这就是我什至能够进入管理页面的原因),如果我[Authorize]GetEcho()方法中删除然后在其中设置断点,我会看到正确的 User 对象。任何想法我做错了什么?

4

2 回答 2

2

您遇到的问题是针对 MVC 控制器,您有以下问题:

[Authorize(Roles = "Admin")]

虽然针对 API 控制器,但您有这个:

[Authorize(Roles = "admin")]

角色检查区分大小写。如果您将 API 控制器更改为使用Admin而不是admin,它应该可以解决问题。

于 2016-02-03T02:03:43.510 回答
-1

您始终必须在 API 请求中携带您的身份验证数据或用户令牌(基于您使用的身份验证方式)。

在普通的 jQuery 中,它可能看起来像

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

于 2016-02-02T21:47:24.433 回答