Global.asax中FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)的用途是什么

时间:2014-10-13 19:02:31

标签: c# asp.net-mvc

我已阅读类似问题What is the purpose of RegisterGlobalFilter

但是无法得到答案,这个问题在某种程度上也围绕着其他一些东西而且anwser似乎并没有让我满满。

我的问题是: - 在MVC 5 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

中的global.asax中这一行的目的是什么
  1. 为什么需要它?
  2. 添加/注册的目的是什么? 过滤器?
  3. 过滤器必须做什么?

1 个答案:

答案 0 :(得分:48)

FilterConfig是代码中的自定义类,通常位于App_Start文件夹下,通常看起来像这样:

public class FilterConfig {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
        filters.Add(new HandleErrorAttribute());
    }
}

您可以在此列表中添加应在每个请求上执行的自定义过滤器。如果您从FilterAttribute类或其中一个inheritors继承,则可以创建自己的过滤器,例如日志过滤器。

您还可以将这些过滤器应用于需要特定约束的控制器。例如,如果将[RequireHttps]过滤器属性(下面的示例)添加到控制器或控制器中的方法,则用户必须使用https请求才能执行方法中的代码。因此,过滤器不是在每种方法中处理它,而是处理它。

[RequireHttps]
public class MyController : ApiController {
    // only https requests will get through to this method.
    [HttpGet]
    public IHttpActionResult Get() {
       return Ok();
    }
}

您可以将其视为位于用户浏览器和控制器之间的小盒子,过滤输出任何无效请求,或者在控制器完成后执行并且您需要对其进行后处理结果给用户。

如果您想了解更多内容,msdn会在Filtering in ASP.NET MVC处提供有关过滤器的更多详细信息。