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