为.NET MVC应用程序中的所有HTTP GET操作创建自定义OnActionExecuted代码的最佳方法是什么?
您是要创建一个ActionFilter,还是创建一个基本控制器,并且在这两种方法中,是否可以仅针对GET请求触发操作过滤器?
我最初的想法是编写如下的基本控制器,但这是最好的方法,还是我错过了什么?
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (Request.HttpMethod == "GET")
{
...
}
}
答案 0 :(得分:0)
你的代码很好。我会用:
if (string.Equals(Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
此外,如果您想为'GET'请求创建几个ActionFilters,您可以创建公共基础ActionFilter类,然后从中派生所有具体的动作过滤器。
答案 1 :(得分:0)
控制器本身是一个过滤器,因此您可以使用控制器,也可以使用单独的类/过滤器。你必须分析哪一个适合你。通过将逻辑放在控制器中,您可能会丢失单元测试,因此如果测试/ SOC是重要的问题,那么我可能建议选择一个封装逻辑的单独类。此外,如果应用程序中有两个不同的基本控制器(很少),则可以避免代码重复。
答案 2 :(得分:0)
最好的方法是使用基本控制器或在操作上声明的自定义操作过滤器。最好使用控制器工厂全局注册动作过滤器,既不需要继承基本控制器,也不需要在任何控制器/动作上添加动作过滤器。动作过滤器已在ActionInvoker
中声明的自定义DefaultControllerFactory
派生中分配给Controller global.asax
。
This博客文章对实施此方法非常有用。