Asp.net mvc 3 使用JsonReult操作进行授权jQuery ajax在未授权时返回状态代码200

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

我有需要身份验证和特殊角色的JsonResult操作

[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