我还不完全清楚我为什么需要构建自定义动作过滤器。也许有几个例子会有所帮助。
您认为项目中是否有必要的动作过滤器?也许重要的是你在所有的MVC项目中重复使用它们?
答案 0 :(得分:3)
我使用“日志记录”操作过滤器来记录对控制器的所有调用以及参数转储 - 这在第三方测试期间非常有用,这使我能够看到人们与应用程序交互的方式/原因/时间
虽然不是动作过滤器,但我还将一个日志记录挂钩放入我的存储库中,这些存储库转储由任何Linq2SQL代码生成的SQL ...再次有助于查看正在执行的内容以及何时执行。
答案 1 :(得分:2)
我最喜欢的“必须拥有”过滤器是一个检查视图模型以查看是否有空列表的过滤器。如果有,它会尝试从数据库中填充它们。我主要使用它来填充共享下拉列表,所以我不必将该代码放在控制器操作中。
答案 2 :(得分:2)
任何面向公众的网站肯定都需要某种验证码验证。那么为什么不使用非常强大且背后有非常好用途的那个呢?的验证码强>
答案 3 :(得分:2)
不支持的浏览器过滤器(UBF) - 检查Request.Browser 并重定向到浏览器下载页面或轻量级页面。
默认情况下,我们所有的控制器都只支持jQuery支持的浏览器。但程序员van mark控制器具有覆盖UBF的特殊属性
MVC3新的全局过滤器更容易使用UBF。
答案 4 :(得分:1)
这是在数据库中创建唯一记录的日常场景。假设您有一个实体User
。您可以在其上设置所有可能的验证属性,但有一个您无法放置它。这就是实体实例是否是唯一的。
为什么我们还需要一个?
这是两个最常见的进程,User
实体涉及验证:
那么你创建一个新用户,你必须检查它是否在你的数据库中是唯一的(用户名或电子邮件或类似的东西;必须检查某些东西的唯一性。)
但是当您进行更新时,不应检查唯一性,因为用户已存在于数据库中。
在Create
操作上使用操作过滤器。但是,由于这种过滤器应该被用于所有不同类型的实体,因此使其更通用和可重用是明智的,因此我们实际上可以将它用于各种实体。
答案 5 :(得分:0)
我有两个我不能没有的生活:
a)AjaxMasterPageInjectorAttribute:这个小家伙的工作是检查请求IsAjax(),然后根据需要交换到无边框的AjaxMasterPage。 Corolarry是JsonCommandInterceptor - 它根据需要接受响应并将其更改为ajax场景的Json命令。如果你需要,可以让一个动作变成ajaxy的动作链。
b)ViewModelWrapperInjectorAttribute:抓取视图模型并插入某种更全局的站点范围的ViewModelWrapper。让您的行动专注于处理他们应该做的事情,并将填充/提供所述ViewModelWrapper的业务转移到更加基础设施的地方。