【发布时间】:2016-05-11 21:34:10
【问题描述】:
我正在使用 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(这就是我什至能够进入管理页面的原因),如果我从 GetEcho() 方法中删除 [Authorize] 然后在其中设置一个断点,我看到正确的用户对象。任何想法我做错了什么?
【问题讨论】:
-
向我们展示你的 jquery-ajax 调用
-
@CodeNotFound - 使用 ajax 调用更新
-
您使用哪种身份验证? Windows、Active Directory、外部提供程序?
-
内置 ASP.NET 身份验证机制,带有登录名和密码。一个新的 MVC 项目附带的一个(以前称为 forms auth - 新名称是什么?)
-
那将使用 cookie 而不是令牌。作为一种解决方法,您可以在发送 ajax 请求时将
withCredentials设置为 true,但这不是最佳解决方案。
标签: asp.net-mvc asp.net-web-api asp.net-mvc-5 asp.net-web-api2 asp.net-authorization