我的ASP MVC(1.0)网站有一个默认的登录页面(基于OpenId - 但不应该有所不同).当AuthorizedAttribute在Action/Controller上时,它可以正常工作.
但是,我也有AJAX请求.以下是我对他们的看法:
if (Request.IsAjaxRequest())
{
if (Request.IsAuthenticated)
{
// Authenticated Ajax request
}
else
{
// Non-authenticated Ajax request.
Response.StatusCode = (int)HttpStatusCode.Unauthorized;
return Json(new { response = "AUTHENTICATION_FAILED" });
}
}
Run Code Online (Sandbox Code Playgroud)
问题是如果我将Response.StatusCode设置为Unauthorized,请求将被重定向到我的登录页面,这对Ajax请求不利.
对此问题的任何建议表示赞赏.
这是一个常见问题.
Authorize属性返回Http 401 Unauthorized响应.然后返回一个HTTP 200(和登录页)回到您的Ajax请求 - 然而不幸的是,如果你启用了FormsAuthentication,401是由FormsAuthenticationModule然后执行重定向到登录页面拦截.
最好的替代方法是修改授权代码以返回不同的Http状态代码 - 比如403 - formAuthenticationModule没有捕获它,你可以捕获Ajax方法.
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |