0

例如我有以下控制器 example.com/controller/

有以下三种方法:

  • example.com/controller/method1
  • example.com/controller/method2
  • example.com/controller/validate

无论调用什么方法,我都希望 validate 运行,我想确保 validate 运行,因为它包含验证客户端是否设置了有效的 cookie 或从页面启动它们的代码。

4

4 回答 4

4

我认为您需要ActionFilter来进行验证。创建您的自定义验证过滤器属性,覆盖其OnActionExecuting方法(进行 cookie 验证),并将属性应用于控制器(或特定操作)。

于 2012-11-27T22:49:33.347 回答
3

我建议查看操作过滤器:

动作过滤器是一个属性,您可以将其应用于控制器动作——或整个控制器——修改动作的执行方式。ASP.NET MVC 框架包括几个动作过滤器:

  • OutputCache – 此操作过滤器将控制器操作的输出缓存指定的时间量。
  • HandleError – 此操作过滤器处理控制器操作执行时引发的错误。
  • 授权 - 此操作过滤器使您能够限制对特定用户或角色的访问。

您还可以创建自己的自定义操作过滤器。例如,您可能希望创建自定义操作过滤器以实现自定义身份验证系统。或者,您可能想要创建一个操作过滤器来修改控制器操作返回的视图数据。

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

于 2012-11-27T22:51:02.720 回答
1

根据您想要执行此检查的时间,您可以将其放在控制器的构造函数中,或者从基本控制器(通常是 AsyncController)覆盖 OnActionExecuting

如果您想在每个控制器上运行此检查,那么我建议您创建一个 ControllerBase 类,然后您的其他控制器可以从该类继承。

于 2012-11-27T22:52:19.273 回答
0

您应该将验证代码从操作移动到自定义授权过滤器。与操作过滤器不同,授权过滤器是首先运行的过滤器,因此您应该将它们用于此类安全检查。

已经有一个内置的授权过滤器Authorize做得不错,如果你想创建一个自定义的,我建议扩展Authorize属性并覆盖所需的方法。该Authorize属性做了一些解决方法以避免缓存问题,这就是我推荐它的原因。

于 2012-11-28T15:04:05.197 回答