我已经创建了一个新的asp.net MVC5Web应用程序,并且我使用个人帐户(表单身份验证)身份验证。这将构建一个完整的帐户控制器。然后,我创建了一个名为People的新控制器,并在其前面添加了Authorize属性,如下所示:
[Authorize]
public class PeopleController : Controller
{然后,我尝试在不登录的情况下直接访问控制器,因此我被重定向到登录页面。但我注意到,使用IE F12 developer tool,http状态将是302,而不是401,尽管根据http标准,如果请求身份验证失败,则应用程序应返回http 401,这是我得到的结果:

有人对此有什么建议吗?我的意思是,任何应用程序都应该完全符合http标准吗?或者,如果用户没有通过身份验证而没有引发http 401错误(就像默认的asp.net mvc正在做的那样),那么将用户重定向到登录页面没有问题吗?谢谢
发布于 2014-10-24 09:38:10
在这种情况下,返回302或401http状态码取决于您是否希望控制当用户从服务器端或客户端未经授权时发生的情况。它还取决于您发出的请求是完整页面提交还是AJAX请求。AJAX风格的请求通常倾向于401,而完整页面提交倾向于302重定向。
如果您希望在服务器端处理未经授权的情况,并将用户重定向回登录页面,那么通常的做法是返回302重定向到该页面。
如果你想在客户端处理这种情况,那么你可以让请求返回401。然后,您将在客户端中有一个401处理程序,它将检测到它并执行客户端重定向到登录页面。如果您希望在同一页面上显示用户不再被授权的消息,而不是重定向,也可以使用401。
您将看到Web API Authorize属性返回401和MVC Authorize属性执行302重定向。
发布于 2014-10-24 08:14:16
302是进行url重定向的一种非常常见的方法。导致302而不是401错误的将是url重定向。这表明它已将您从/people/移回到/Account/Login。
https://stackoverflow.com/questions/26539530
复制相似问题