ASP.NET Web API授权过滤器

时间:2014-05-29 07:34:42

标签: c# asp.net-web-api filter authorization

我有一个覆盖OnAuthorization方法的全局授权过滤器。

在调试时,我看到首先实例化控制器类,然后调用OnAuthorization方法。

这是一个已知的行为,因为我在控制器构造函数中有一些代码,如果没有授权,则无需运行。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

动作过滤器在应用它们的Action之前执行。如果你有全局授权过滤器,这意味着它们是全局注册的,你不必用这些过滤器来装饰每个动作,但这不会改变Action过滤器的行为,即在动作之前执行。

首先初始化控制器,然后调用相应的Actions,因此您的授权过滤器将在Controller的构造函数之后和操作之前执行。这是Action过滤器的行为,因为它们是这样设计的。

如果要在控制器构造之前执行授权,请尝试通过继承DelegatingHandler类来创建用于授权的消息处理程序而不是Action过滤器。