All infos - Класс пассивного атрибута. Обработка исключений asp.net Web Api 2.0
09
нояб

Класс пассивного атрибута. Обработка исключений 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-запроса будут логироваться в БД.

Share this post