mirror of
				https://github.com/Kareadita/Kavita.git
				synced 2025-10-31 18:47:05 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Net;
 | |
| using System.Text.Json;
 | |
| using System.Threading.Tasks;
 | |
| using API.Errors;
 | |
| using Microsoft.AspNetCore.Http;
 | |
| using Microsoft.Extensions.Hosting;
 | |
| using Microsoft.Extensions.Logging;
 | |
| 
 | |
| namespace API.Middleware;
 | |
| 
 | |
| public class ExceptionMiddleware(RequestDelegate next, ILogger<ExceptionMiddleware> logger)
 | |
| {
 | |
|     public async Task InvokeAsync(HttpContext context)
 | |
|     {
 | |
|         try
 | |
|         {
 | |
|             await next(context); // downstream middlewares or http call
 | |
|         }
 | |
|         catch (Exception ex)
 | |
|         {
 | |
|             logger.LogError(ex, "There was an exception");
 | |
|             context.Response.ContentType = "application/json";
 | |
|             context.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
 | |
| 
 | |
|             var errorMessage = string.IsNullOrEmpty(ex.Message) ? "Internal Server Error" : ex.Message;
 | |
| 
 | |
|             var response = new ApiException(context.Response.StatusCode, errorMessage, ex.StackTrace);
 | |
| 
 | |
|             var options = new JsonSerializerOptions
 | |
|             {
 | |
|                 PropertyNamingPolicy =
 | |
|                     JsonNamingPolicy.CamelCase
 | |
|             };
 | |
| 
 | |
|             var json = JsonSerializer.Serialize(response, options);
 | |
| 
 | |
|             await context.Response.WriteAsync(json);
 | |
| 
 | |
|         }
 | |
|     }
 | |
| }
 |