Класс пассивного атрибута. Обработка исключений asp.net Web Api 2.0
Класс пассивного атрибута. Наследование от Attribute нужно если его использовать как атрибут. Но в данном примере его можно не использовать, Класс пассивного атрибута. Наследование от Attribute нужно если его использовать как атрибут. Но в данном примере его можно не использовать, т.к. задача добавить в процесс обработки запроса контроллером дополнительную логику - фильтр исключений. Т.е. когда произойдёт исключение, в любом месте приложения в контексте запроса, дынные ошибки будут логгироваться в базу данных.
public class ExceptionFilter : Attribute, IExceptionFilter { public bool AllowMultiple => false; public Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken) { var errorMessage = string.Empty; if (actionExecutedContext != null) using (var uow = new UOW(ConfigurationManager.ConnectionStrings["ConnectionName"].ConnectionString)) { var appErrorLogService = new AppErrorLogService(uow); try { appErrorLogService.Create(new AppErrorLog { PageName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName, URL = actionExecutedContext.Request.RequestUri.AbsoluteUri, Stack = actionExecutedContext.Exception.StackTrace, Message = actionExecutedContext.Exception.Message }); errorMessage = actionExecutedContext.Exception.Message; } catch (Exception e) { errorMessage = "Ошибка при обработке исключения! Сообщите администратору: " + e.Message; } } return Task.FromResult(errorMessage); } }
Добавляем фильтр в файле Global.asax.
protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.Filters.Add(new ExceptionFilter()); }
Теперь все исключения http-запроса будут логироваться в БД.