ASP.NET Web API 授权过滤器

4

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

在调试时,我发现控制器类先实例化,然后再调用OnAuthorization方法。

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

是否有任何方法可以解决这个问题?


你的构造函数到底在做什么 - 你确定它没有做太多吗?一般来说,你的构造函数不应该处理授权问题。 - Stephen Byrne
1个回答

5

在应用于Action之前,将执行Action筛选器。如果您有全局授权筛选器,则表示它们已全局注册,您无需为每个操作添加这些筛选器,但这不会改变Action筛选器的行为,即在操作之前执行。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接