【发布时间】:2014-04-04 18:30:06
【问题描述】:
我想覆盖 [Authorize] 属性的默认行为。我找到了这个 similar question,但它已经很老了,而且 MVC 自发布以来已经进行了几次迭代。
我不希望创建单独的“自定义”属性类并将该属性应用于所有控制器/操作,以便将未经授权的请求发送到单独的控制器/操作。我希望能够在全局范围内执行此操作并影响已配置有 [Authorize] 属性的所有控制器/操作。
这可能吗?
【问题讨论】:
-
没有。通过使用
Authorize装饰您的控制器或动作,您将其耦合到AuthorizeAttribute对象。显然,您无法编辑该对象的源代码,除非您想构建自己的 MVC 程序集:) 您最好的办法是从它派生并覆盖其他帖子中详述的适当方法。 -
感谢@ChrisHardie!我已经更新了我上面的帖子,说明我是如何使用自定义属性完成这项工作的。
-
FWIW,这不是
AuthorizeAttribute。它为仍然无权访问特定操作的经过身份验证的用户返回正确的 403 响应。表单身份验证实际上是这里的罪魁祸首。它拦截both 401(未经身份验证)和403(经过身份验证,但未经授权)并重定向到登录页面。似乎也没有办法阻止这种情况。在返回 401 或 403 之前,您可以在操作 (ASP.NET 4.5+) 中手动禁用重定向,但不能在全局范围内,也不能仅针对两个状态代码之一。
标签: c# asp.net-mvc asp.net-mvc-5 authorize-attribute