【问题标题】:OnActionExecuted code for all HTTP GET actions in .NET MVC Application.NET MVC 应用程序中所有 HTTP GET 操作的 OnActionExecuted 代码
【发布时间】:2012-09-13 13:44:01
【问题描述】:

为 .NET MVC 应用程序中的所有 HTTP GET 操作创建自定义 OnActionExecuted 代码的最佳方法是什么?

您会创建一个 ActionFilter,还是创建一个基本控制器,在这两种方法中是否可以仅在 GET 请求时触发动作过滤器?

我最初的想法是编写如下的基本控制器,但这是最好的方式,还是我遗漏了什么?

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (Request.HttpMethod == "GET")
    {
        ...
    }
}

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    你的代码很好。我会使用:

    if (string.Equals(Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
    

    此外,如果您只想为“GET”请求创建几个 ActionFilter,您可以创建通用的基本 ActionFilter 类,然后从中派生所有具体的操作过滤器。

    【讨论】:

      【解决方案2】:

      控制器本身是一个过滤器,因此您可以使用控制器,也可以使用单独的类/过滤器。你必须分析哪一个适合你。通过将逻辑放在控制器中,您可能会丢失单元测试,因此如果测试/SOC 是重要问题,那么我可能会建议使用一个单独的类来封装逻辑。此外,如果您在应用程序中有两个不同的基本控制器(很少),您可以避免代码重复。

      【讨论】:

        【解决方案3】:

        事实证明,最好的方法既不是使用基本控制器,也不是在动​​作上声明的自定义动作过滤器。最好使用控制器工厂全局注册动作过滤器,并且不需要从基本控制器继承,也不需要在任何控制器/动作上添加动作过滤器。动作过滤器在global.asax 中声明的自定义DefaultControllerFactory 派生中分配给控制器ActionInvoker

        This 博客文章对实施这种方法很有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-27
          • 1970-01-01
          • 2013-02-23
          • 2019-07-22
          • 2016-07-14
          • 2015-10-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多