Erstellen Sie einen neuen Ordner und eine Klasse namens CustomExceptionMiddleware ExceptionMiddleware.cs ist drin.
Als erstes müssen wir den IloggerManager-Dienst registrieren und Implementieren Sie RequestDelegate durch Abhängigkeitsinjektion.
Der _next-Parameter vom Typ RequestDeleagate ist ein Funktionsdelegat, der verarbeitet werden kann Unsere HTTP-Anfrage.
Nach dem Registrierungsprozess müssen wir die InvokeAsync()-Methode erstellen RequestDelegate kann ohne diese Funktion keine Anfragen bearbeiten.
_nächster Delegat sollte die Anfrage und Get-Vorgänge unseres Controllers bearbeiten sollte eine erfolgreiche Antwort generieren. Aber wenn die Anfrage fehlschlägt (und sie schlägt fehl, Da wir eine Ausnahme erzwingen, löst unsere Middleware den Catch-Block aus und ruft HandleExceptionAsync auf Verfahren.
public class ExceptionMiddleware{ private readonly RequestDelegate _next; private readonly ILoggerManager _logger; public ExceptionMiddleware(RequestDelegate next, ILoggerManager logger){ _logger = logger; _next = next; } public async Task InvokeAsync(HttpContext httpContext){ try{ await _next(httpContext); } catch (Exception ex){ _logger.LogError($"Something went wrong: {ex}"); await HandleExceptionAsync(httpContext, ex); } } private Task HandleExceptionAsync(HttpContext context, Exception exception){ context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; return context.Response.WriteAsync(new ErrorDetails(){ StatusCode = context.Response.StatusCode, Message = "Internal Server Error from the custom middleware." }.ToString()); } }
Ändern Sie unsere ExceptionMiddlewareExtensions-Klasse mit einer anderen statischen Methode –
public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder app){ app.UseMiddleware<ExceptionMiddleware>(); }
Verwenden Sie diese Methode in der Konfigurationsmethode der Startup-Klasse –
app.ConfigureCustomExceptionMiddleware();
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Fehlern in der Middleware C# Asp.net Core um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!