3

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

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

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

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

3 回答 3

0

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

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

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

于 2012-09-13T13:51:26.153 回答
0

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

于 2012-09-13T14:57:06.730 回答
0

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

这篇博文对实施这种方法很有用。

于 2013-06-27T13:30:17.760 回答