asp.net-mvc – 覆盖控制器AuthorizeAttribute只有一个操作

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 覆盖控制器AuthorizeAttribute只有一个操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个用AuthorizeAttribute装饰的控制器。控制器包含几个操作,除了需要由CustomAuthorizeAttribute提供一些自定义认证的操作之外,所有操作都需要认证。

我的问题是一旦我添加了[授权]在控制器级别可以覆盖它(或删除它与[CustomAuthorize]只是一个动作?或者,我必须从控制器级别删除[授权],并将它单独添加到每个其他操作?

我纯粹为了方便,因为我是懒惰,不想装饰每一个动作与AuthorizeAttribute。

[Authorize]
public class MyController : Controller {

  //requires authentication
  public ViewResult Admin() {
    return View();
  }

  //... a lot more actions requiring authentication

  //requires custom authentication
  [CustomAuthorize]  //never invoked as already Failed at controller level
  public ViewResult Home() {
    return View();
  }

}

解决方法

您可以更改属性运行的顺序(使用Order属性),但我相信在这种情况下,它们将仍然运行,除非生成立即生效的结果。关键是在最高级别(类)应用最小限制性属性,并对方法获得更多限制。例如,如果您希望Home操作公开,您需要从类中删除Authorize属性,并将其应用于其他每个方法

如果操作具有相同的允许级别,但具有不同的结果,则改变顺序可能就足够了。例如,您通常会重定向到“登录”操作,但对于Home,您要重定向到“关于”操作。在这种情况下,给予类属性Order = 2和Home动作属性Order = 1。

猜你在找的asp.Net相关文章