我正在使用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()方法):&#34;此请求已拒绝授权。&#34;我不明白为什么 - 我的用户有管理员角色(这就是为什么我甚至可以进入管理页面),以及我是否从[Authorize]
方法移除GetEcho()
然后在其中设置断点,我看到正确的User对象。我有什么想法吗?
答案 0 :(得分:2)
你遇到的问题是,对于MVC控制器,你有这个:
[Authorize(Roles = "Admin")]
虽然针对API控制器,但您有:
[Authorize(Roles = "admin")]
角色检查区分大小写。如果您将API控制器更改为使用Admin
而不是admin
,则应解决此问题。
答案 1 :(得分:-1)
您必须随身携带您的身份验证数据或用户令牌(基于您使用的身份验证方式)和您的API请求。
在简单的jQuery中它可能看起来像
$.ajax({
beforeSend: function (xhr) {
xhr.setRequestHeader("ownToken", authToken);