解決為MVC和WebAPi新增過濾器
阿新 • • 發佈:2020-06-18
解決為MVC和WebAPi新增過濾器
Mvc的就直接在FilterConfig類的RegisterGlobalFilters方法中新增以下程式碼即可
Web Api的過濾器沒有單獨一個配置類,可以寫在WebApiConfig類的Register中
MVC過濾器
public class MvcHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { //這裡可以做錯誤日誌處理或寫資料庫等操作Console.WriteLine(filterContext.Exception.Message); base.OnException(filterContext); } }
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute());filters.Add(new MvcHandleErrorAttribute()); } }
WebApi過濾器
public class WebApiExceptionFilter : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { var message = context.Exception.Message;if (context.Exception.InnerException != null) message = context.Exception.InnerException.Message; context.Response = new HttpResponseMessage() { Content = new StringContent(message) }; base.OnException(context); } }
public static class WebApiConfig { public static void Register(HttpConfiguration config) { //是為了讓WebApi的控制器自動匹配ApiController var suffix = typeof(DefaultHttpControllerSelector).GetField("ControllerSuffix",BindingFlags.Static | BindingFlags.Public); if (suffix != null) suffix.SetValue(null,"ApiController"); //為了讓WebApi也支援NameSpace config.Services.Replace(typeof(IHttpControllerSelector),new NamespaceHttpControllerSelector(config)); //為WebApi新增過濾器 config.Filters.Add(new WebApiExceptionFilter()); // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional } ); } }