OnActionExecuted代码,用于.NET MVC应用程序中的所有HTTP GET操作

时间:2012-09-13 13:44:01

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

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

您是要创建一个ActionFilter,还是创建一个基本控制器,并且在这两种方法中,是否可以仅针对GET请求触发操作过滤器?

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

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

3 个答案:

答案 0 :(得分:0)

你的代码很好。我会用:

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

此外,如果您想为'GET'请求创建几个ActionFilters,您可以创建公共基础ActionFilter类,然后从中派生所有具体的动作过滤器。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

This博客文章对实施此方法非常有用。