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

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

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

 [Authorize]
    public class PeopleController : Controller
    {

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

enter image description here

有人可以就此提出建议吗?我的意思是任何应用程序都应该完全符合 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/

相关文章:

asp.net-mvc-4 - 如何删除 ASP.net MVC 链接中的 Controller 名称?

asp.net - 在代码后面通过 jquery 添加列表框项目时出现问题

asp.net - 更改 ASP.NET 成员资格配置

c# - 在ViewModel、ASP.net MVC中定义 "Model"类型的属性好不好

c# - 在 MVC 项目中的何处创建数据访问层

javascript - knockout 映射和 foreach 数据绑定(bind)在带有按钮的表上,缺少对 View 模型的引用?

jquery - 刚开始 mvc 4 我可以在哪里调整包

asp.net - 免费 DotNetNuke 皮肤资源

asp.net - ASP.NET 中 APP_Data 文件夹的安全性

c# - 将值从 Controller 发送到 Jquery