例如我有以下控制器
example.com/controller/
有以下三种方法:
example.com/controller/method1
example.com/controller/method2
example.com/controller/validate
无论调用什么方法,我都希望 validate 运行,我想确保 validate 运行,因为它包含验证客户端是否设置了有效的 cookie 或从页面启动它们的代码。
例如我有以下控制器
example.com/controller/
有以下三种方法:
example.com/controller/method1
example.com/controller/method2
example.com/controller/validate
无论调用什么方法,我都希望 validate 运行,我想确保 validate 运行,因为它包含验证客户端是否设置了有效的 cookie 或从页面启动它们的代码。
我认为您需要ActionFilter来进行验证。创建您的自定义验证过滤器属性,覆盖其OnActionExecuting方法(进行 cookie 验证),并将属性应用于控制器(或特定操作)。
我建议查看操作过滤器:
动作过滤器是一个属性,您可以将其应用于控制器动作——或整个控制器——修改动作的执行方式。ASP.NET MVC 框架包括几个动作过滤器:
- OutputCache – 此操作过滤器将控制器操作的输出缓存指定的时间量。
- HandleError – 此操作过滤器处理控制器操作执行时引发的错误。
- 授权 - 此操作过滤器使您能够限制对特定用户或角色的访问。
您还可以创建自己的自定义操作过滤器。例如,您可能希望创建自定义操作过滤器以实现自定义身份验证系统。或者,您可能想要创建一个操作过滤器来修改控制器操作返回的视图数据。
根据您想要执行此检查的时间,您可以将其放在控制器的构造函数中,或者从基本控制器(通常是 AsyncController)覆盖 OnActionExecuting 。
如果您想在每个控制器上运行此检查,那么我建议您创建一个 ControllerBase 类,然后您的其他控制器可以从该类继承。
您应该将验证代码从操作移动到自定义授权过滤器。与操作过滤器不同,授权过滤器是首先运行的过滤器,因此您应该将它们用于此类安全检查。
已经有一个内置的授权过滤器Authorize
做得不错,如果你想创建一个自定义的,我建议扩展Authorize
属性并覆盖所需的方法。该Authorize
属性做了一些解决方法以避免缓存问题,这就是我推荐它的原因。