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