Globální filtry MVC vs. Web API
Registrace globálních filtrů u MVC projektů a projektů Web API se trochu liší. Zde je shrnutí rozdílů, ukázané na filtru použitelném pro logování chyb.
MVC
Seznam filtrů je v kolekci GlobalFilters.Filters a tentokrát se jedná o kolekci typu GlobalFilterCollection. Tato kolekce tedy umožňuje enumerovat jednotlivými Filter objekty.
Global.asax
protected void Application_Start() { FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); }
App_Start/FilterConfig.cs
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleMvcError()); } }
HandleMvcError.cs
public class HandleMvcError : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { // log error here } }
WebApi
Seznam filtrů je uložen v kolekci GlobalConfiguration.Configuration.Filters a jedná se o kolekci typu HttpFilterCollection. Umožňuje enumerovat jednotlivými FilterInfo objekty.
Global.asax
protected void Application_Start() { FilterConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters); }
App_Start/FilterConfig.cs
public class FilterConfig { public static void RegisterGlobalFilters(HttpFilterCollection filters) { filters.Add(new HandleWebApiError()); } }
HandleWebApiError.cs
public class HandleWebApiError : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext filterContext) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new StringContent(filterContext.Exception.Message), ReasonPhrase = "Internal server error" }); } }