我创建了一个新的 asp.net mvc 5 Web 应用程序,并且使用个人帐户(表单例份验证)身份验证。这将构建一个完整的帐户 Controller 。 然后我创建了一个名为 People 的新 Controller ,并在其前面添加了 [Authorize] 属性,如下所示:-
[Authorize]
public class PeopleController : Controller
{
然后我尝试在不登录的情况下直接访问 Controller ,因此我被重定向到登录页面。但我注意到,使用 IE F12 开发人员工具,http 状态将是 302 而不是 401 ,尽管根据 http 标准,如果请求身份验证失败,那么应用程序应该返回 http 401,这是我得到的:-
有人可以就此提出建议吗?我的意思是任何应用程序都应该完全符合 http 标准吗?或者,如果用户未经过身份验证而不会引发 http 401 错误(正如默认的 asp.net mvc 所做的那样),则将用户重定向到登录页面不会有问题? 谢谢
最佳答案
在这种情况下返回 302 或 401 http 状态代码取决于您是否想要控制当用户未经服务器端或客户端授权时发生的情况。它还取决于您发出的请求是整页提交还是 AJAX 请求。 AJAX 样式请求通常更喜欢 401,而整页提交更喜欢 302 重定向。
如果您想在服务器端处理未经授权的情况并将用户重定向回登录页面,那么常见的做法是返回 302 重定向到该页面。
如果您想在客户端处理这种情况,那么您可以让请求返回 401。然后,客户端中将有一个 401 处理程序,它将检测它并执行客户端重定向到登录页面。如果您想在同一页面上显示用户不再被授权的消息而不是重定向,则 401 也是一种方法。
您将看到 Web API Authorize 属性返回 401,而 MVC Authorize 属性执行 302 重定向。
关于如果授权失败,Asp.net mvc [Authorize] 属性将返回 http 302 而不是 http 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539530/