C# 在您的项目中是否有您认为必须具备的动作过滤器?

C# 在您的项目中是否有您认为必须具备的动作过滤器?,c#,asp.net-mvc,action-filter,C#,Asp.net Mvc,Action Filter,我仍然不完全清楚为什么需要构建自定义操作过滤器。也许举几个例子会有所帮助 您的项目中是否有您认为必须具备的操作过滤器?甚至可能如此重要,以至于您可以在所有MVC项目中重复使用它们?我使用“记录”操作过滤器来记录对控制器的所有调用,并转储参数-这在第三方测试期间非常有用,允许我查看人们如何/为什么/何时与应用程序交互 虽然不是一个操作过滤器,但我也在我的存储库中放置了一个日志挂钩,用于转储任何Linq2SQL代码生成的SQL。。。同样有助于准确查看执行的内容和时间。我最喜欢的“必有”过滤器用于检查

我仍然不完全清楚为什么需要构建自定义操作过滤器。也许举几个例子会有所帮助

您的项目中是否有您认为必须具备的操作过滤器?甚至可能如此重要,以至于您可以在所有MVC项目中重复使用它们?

我使用“记录”操作过滤器来记录对控制器的所有调用,并转储参数-这在第三方测试期间非常有用,允许我查看人们如何/为什么/何时与应用程序交互

虽然不是一个操作过滤器,但我也在我的存储库中放置了一个日志挂钩,用于转储任何Linq2SQL代码生成的SQL。。。同样有助于准确查看执行的内容和时间。

我最喜欢的“必有”过滤器用于检查视图模型,查看是否存在任何空列表。如果有,它会尝试从数据库中填充它们。我主要使用它来填充共享下拉列表,这样我就不必将该代码放在控制器操作中。

非模型状态验证过滤器 这是在数据库中创建唯一记录的日常场景。假设您有一个实体
用户
。您已经在其上设置了所有可能的验证属性,但有一个不能在其上设置。这就是实体实例是否唯一

我们为什么还需要一个呢?
以下是涉及验证的
用户
实体最常见的两个过程:

  • 创建新用户
  • 更新用户数据
  • 所以,当你创建一个新用户时,你必须检查它在数据库中是否是唯一的(用户名、电子邮件或类似的东西;必须检查某些东西的唯一性)

    但是当您进行更新时,不应该检查唯一性,因为用户已经存在于数据库中

    我们如何解决这个问题? 使用
    创建
    操作上的操作过滤器。但是,由于这种过滤器应该用于所有不同类型的实体,因此明智的做法是使其更通用和可重用,因此我们可以实际用于所有类型的实体

    reCaptcha验证过滤器 任何面向公众的网站都需要某种验证码验证。那么,为什么不使用一个非常强大,背后也有很好的目的reCaptcha

    不支持的浏览器筛选器(UBF)-检查请求。浏览器 并重定向到浏览器下载页面或轻量级页面

    默认情况下,我们所有的控制器只支持jQuery支持的浏览器。但程序员van mark控制器具有覆盖UBF的特殊属性


    MVC3新的全局过滤器使UBF的使用更加容易。

    我有两个我离不开的过滤器:

    a) AjaxMasterPageInjectorAttribute:这个小家伙的工作是检查请求是否为IsAjax(),然后根据需要切换到无铬AjaxMasterPage。Corolary是JsonCommandInterceptor——它接收响应并根据需要将其更改为ajax场景的Json命令。允许一个单独的动作链动态地变成ajaxy,如果你需要的话


    b) ViewModelWrapperInjectorAttribute:获取视图模型并将其插入某种更全局的站点范围的ViewModelWrapper。让你的行动集中在处理他们应该做的事情上,并避免将所述ViewModelWrapper填充/提供到更基础结构的地方。

    至于我,你应该使用模型绑定器来完成这件事。@Sergey,这是通向视图的路,而不是通向视图的路。MVC 1和MVC 2有几个全局过滤器实现。请参阅IJoinedFilter(我的最爱)或MVCTurbine是的,我知道,我们开发了自己的。投票支持NIH原则!:)感谢链接IJoinedFilter基础设施非常接近我们自己的实现。这听起来更适合服务层。从技术上讲,MVC只是你的UI层。我有点喜欢它。。。您的日志记录有多“重”(对性能有多大影响?)我认为开销相当低。。。。我目前正在使用NLog日志实用程序()进行实际日志记录。之前我也成功地使用了log4net()。