Asp.net mvc 3 使用JsonReult操作进行授权jQuery ajax在未授权时返回状态代码200
我有需要身份验证和特殊角色的JsonResult操作Asp.net mvc 3 使用JsonReult操作进行授权jQuery ajax在未授权时返回状态代码200,asp.net-mvc-3,jquery,Asp.net Mvc 3,Jquery,我有需要身份验证和特殊角色的JsonResult操作 [Authorize(Roles = "User")] public virtual JsonResult Cancel() { //... } 但是,例如,当我注销并使用jQueryAjax执行此操作时,我可以看到状态代码是200,但应该是401 $.ajax({ url: "/Cancel/", type: "POST", dataTy
[Authorize(Roles = "User")]
public virtual JsonResult Cancel()
{
//...
}
但是,例如,当我注销并使用jQueryAjax执行此操作时,我可以看到状态代码是200,但应该是401
$.ajax({
url: "/Cancel/",
type: "POST",
dataType: "text",
cache: false,
success: function (data, textStatus, xhr) {
alert(xhr.status); //200 here when unauthorized
}
});
所以我真的无法执行控制器逻辑,因为它没有被授权,我在调试时检查了它,但是为什么我在jQueryAjax中得到状态代码200
更新:
在Fiddler中,状态代码是302,我可以看到对/Acount/Login的请求是在/Cancel请求之后发出的
在Chrome网络状态代码中:302已找到,我还可以看到在调用/Cancel之后调用了login controller/Acount/login
/Cancel - 302
/Acount/Login - 200
在Opera网络中完成请求详细信息
有人能解释一下发生了什么,为什么jquery没有得到正确的状态码吗
我真正想做的是——a想获得正确的状态代码,如果是401,我想将用户重定向到登录页面window.location.href=/Acount/login
请求详细信息
回应详情
FormsAuthentication在其http模块中具有处理程序,该处理程序将所有401响应重定向到登录页面,而不是错误页面
查看FormsAuthenticationModule的源代码,应该有一个非常难看的解决方法-如果将ReturnUrl=/附加到查询字符串中,则模块不应该执行重定向
最好的解决方案可能是编写自己的http模块进行身份验证——您可以在reflector中打开FormsAuthenticationModule并将其用作参考
/Cancel - 302
/Acount/Login - 200
POST /Cancel/ HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.50
Host: localhost:999
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate
Referer: http://localhost:999/Action
Cookie: style=normalText; ASP.NET_SessionId=latzewpi3kqmkq4meljv0ln5
Connection: Keep-Alive
Content-Length: 0
Accept: text/plain, */*; q=0.01
X-Requested-With: XMLHttpRequest
Content-Type: text/xml; charset=utf-8
Content-Transfer-Encoding: binary
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /Account/LogOn?ReturnUrl=%2fCancel%2f
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 11 Aug 2011 03:04:53 GMT
Content-Length: 169