我想这样做:
[RequiresAuthentication(CompanyType.Client)]
public class FooController
{
public ActionResult OnlyClientUsersCanDoThis()
public ActionResult OnlyClientUsersCanDoThisToo()
[RequiresAuthentication]
public ActionResult AnyTypeOfUserCanDoThis()
你可以明白为什么这行不通。在第三个操作中, Controller 级过滤器将阻止非客户端。我想“解决”冲突的过滤器。我希望更具体的过滤器( Action 过滤器)始终获胜。这看起来自然且直观。
曾几何时,filterContext 公开了执行操作的 MethodInfo。那会让这件事变得很容易。我考虑使用路线信息自己进行一些反射(reflection)。这是行不通的,因为该操作可能会重载,而且我无法判断当前正在执行哪个操作。
另一种方法是在 Controller 级别或操作级别设置过滤器范围,但不要混合,这会产生大量额外的属性噪音。
最佳答案
我们正在研究一种公开其他过滤器的方法,但没有 promise 。
将过滤器应用于 Controller 并不是真正的“范围”,它只是将其应用于所有过滤器的简写。不幸的是,这意味着您不能包含除一项操作之外的所有操作。执行此操作的一种简单方法是将该方法放入另一个 Controller 中。您甚至可以仅针对这种情况添加自定义路由,这样 URL 就不必更改。
关于asp.net-mvc - 解析 Controller 和操作上的 FilterAttributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/274039/