如果授权失败,Asp.net mvc [Authorize]属性将返回http 302而不是http 401

时间:2014-10-24 00:08:12

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5 authorization

我创建了一个新的asp.net mvc 5 Web应用程序,我使用个人帐户(表单身份验证)身份验证。这将构建一个完整的帐户控制器。 然后我创建了一个名为People的新控制器,并在其中添加[Authorize]属性,如下所示: -

 [Authorize]
    public class PeopleController : Controller
    {

然后我尝试在没有登录的情况下直接访问控制器,因此我被重定向到登录页面。但我注意到使用IE F12开发人员工具,http状态将是302而不是401,尽管根据http标准,如果请求失败认证,那么应用程序应该返回http 401,这就是我得到的: -

enter image description here

有人可以就此提出建议吗?我的意思是,任何应用程序是否应完全符合http标准?或者如果用户未经过身份验证而没有引发http 401错误(正如默认的asp.net mvc正在做的那样),则没有将用户重定向到登录页面的问题? 感谢

2 个答案:

答案 0 :(得分:1)

在这种情况下,返回302或401 http状态代码取决于您是否要控制当用户从服务器端或客户端未经授权时发生的情况。它还取决于您提出的请求是完整页面提交还是AJAX请求。 AJAX样式请求通常更喜欢401,而完整页面提交更喜欢302重定向。

如果您想在服务器端处理未经授权的案例并将用户重定向回登录页面,那么通常的做法是将302重定向返回到该页面。

如果你想在客户端处理这种情况,那么你可以让请求返回401.然后,你将在客户端有一个401处理程序,它将检测它并做一个客户端重定向到登录页面。 401也是这样做的方法,如果不是重定向,您希望在用户不再被授权的同一页面上显示消息。

您将看到Web API Authorize属性返回401和MVC Authorize属性执行302重定向。

答案 1 :(得分:0)

302是一种非常常见的网址重定向方式。这将是导致302而不是401错误的url重定向。它表示它已将您从/ people / back移至/ Account / Login。