Vasilek

Форк
0
48 строк · 1.9 Кб
1
using System.Net;
2
using System.Text.Json;
3

4
namespace Vasilek.Services.ProductAPI.Middleware.CustomException
5
{
6
    public class ErrorHandlerMiddleware
7
    {
8
        private readonly RequestDelegate _next;
9
        public ErrorHandlerMiddleware(RequestDelegate next) => _next = next;
10
        public async Task InvokeAsync(HttpContext context)
11
        {
12
            try
13
            {
14
                await _next(context);
15
            }
16
            catch (Exception error)
17
            {
18
                var response = context.Response;
19
                response.ContentType = "application/json";
20
                switch (error)
21
                {
22
                    case AppException ex:
23
                        // Ошибка пользовательского приложения.
24
                        response.StatusCode = (int)HttpStatusCode.BadRequest;
25
                        break;
26
                    case KeyNotFoundException ex:
27
                        // Не найден.
28
                        response.StatusCode = (int)HttpStatusCode.NotFound;
29
                        break;
30
                    case UnauthorizedAccessException ex:
31
                        // Не авторизован.
32
                        response.StatusCode = (int)HttpStatusCode.Unauthorized;
33
                        break;
34
                    case NullReferenceException ex:
35
                        // Не авторизован.
36
                        response.StatusCode = (int)HttpStatusCode.NotFound;
37
                        break;
38
                    default:
39
                        // Необработанная ошибка
40
                        response.StatusCode = (int)HttpStatusCode.InternalServerError;
41
                        break;
42
                }
43
                var result = JsonSerializer.Serialize(new { message = error?.Message });
44
                await response.WriteAsync(result);
45
            }
46
        }
47
    }
48
}
49

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.