【问题标题】:Are there any action filters in your project you feel are a must-have?在您的项目中是否有您认为必须具备的动作过滤器?
【发布时间】:2010-08-15 04:16:11
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net-mvc action-filter


    【解决方案1】:

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

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

    【讨论】:

    • 我有点喜欢...您的日志记录有多“重”(它对性能有多大影响?)
    • 我认为开销非常低....我目前正在使用 NLog 日志记录实用程序 (nlog-project.org) 进行实际日志记录。以前我也成功使用过 log4net (logging.apache.org/log4net/index.html)。
    【解决方案2】:

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

    【讨论】:

    • 对我来说,你应该使用模型活页夹来做这样的事情。
    • @Sergey,这是在去视图的路上,而不是在进来的路上。
    【解决方案3】:

    不支持的浏览器过滤器(UBF) - 检查 Request.Browser 并重定向到浏览器下载页面或轻量级页面。

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

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

    【讨论】:

    【解决方案4】:

    reCaptcha 验证过滤器

    任何面向公众的网站都肯定需要某种形式的验证码人工验证。那么为什么不使用一个非常强大并且背后也有非常好的目的的。 验证码

    Integrating with MVC is rather easy.

    【讨论】:

      【解决方案5】:

      非模型状态验证过滤器

      这是在数据库中创建唯一记录的日常场景。假设您有一个实体User。你已经设置了所有可能的验证属性,但是有一个你不能放在它上面。这就是实体实例是否唯一。

      为什么我们仍然需要一个?
      以下是涉及验证的 User 实体的两个最常见流程:

      1. 创建新用户
      2. 更新用户数据

      然后你创建一个新用户,你很可能必须检查它在你的数据库中是否是唯一的(用户名或电子邮件或类似的东西;必须检查一些东西的唯一性)。

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

      我们如何解决这个问题?

      通过对Create 操作使用操作过滤器。但是由于这种过滤器应该用于所有不同类型的实体,因此使其更通用和可重用是明智之举,因此我们实际上可以将它用于所有类型的实体。

      This is how I've done it.

      【讨论】:

      • 这听起来更适合服务层。从技术上讲,MVC 只是您的 UI 层。
      【解决方案6】:

      我有两个我不能没有:

      a) AjaxMasterPageInjectorAttribute :这个小家伙的工作是检查请求是否 IsAjax(),然后根据需要切换到 chromeless AjaxMasterPage。 Corolarry 是 JsonCommandInterceptor——它接受响应并根据需要将其更改为用于 ajax 场景的 Json 命令。如果您需要,允许创建一个动态变为 ajaxy 的单个动作链。

      b) ViewModelWrapperInjectorAttribute :抓取视图模型并插入到某种更全局的站点范围的 ViewModelWrapper 中。让您的操作专注于处理他们应该做的事情,并将上述 ViewModelWrapper 填充/提供到更基础设施的地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多