Перейти к содержанию

Исключения

Для обработки исключений используется промежуточный слой Middleware.ExceptionFilterMiddleware.cs

Важно размещать обработчик исключений первым среди остальных слоев.

```c# public class Startup { public void Configure(IApplicationBuilder app) { app.UseMiddleware();

    // other layers
}

}

## Как это работает

- Ожидаемые исключения (наследованные от `AppException`) записываются в `WARN` лог, 
    преобразуются в модель `Response` со списком ошибок

- Остальные исключения записываются в `ERROR` лог 
    (NLog отправляет уведомление разработчикам, что произошло неожиданное исключение)
    на фронт отпрвляется стандартный `Response` о критической ошибке на сервере

 - Все интересующие данные о запросе (path, query, body, token) 
    извлекаются и записываются в лог

## SensitiveDataProtector

Что бы исключить потенциальную утечку паролей пользователей из логов добавляем 
    `Curiosity.Tools.SensitiveDataProtector`, который скрывает данные заданных полей.

```c#
_dataProtector.HideInJson(body)

Для этого необходимо в Startup добавить список полей данные в которых будут скрываться

services.AddSensitiveDataProtector(new[]
{
    "Password",
    "PasswordConfirmation",
    "CurrentPassword",
});