Heim > Artikel > Backend-Entwicklung > ExceptionFilter-Filter in asp.net
In diesem Artikel wird hauptsächlich der ExceptionFilter-Filter des asp.net-Kern-MVC-Globalfilters ausführlich vorgestellt, der einen bestimmten Referenzwert hat.
Diese Kursreihe wird die Verwendung erklären Integrierter globaler Filter im ASP.NET-Kern-MVC, der in die folgenden Kapitel unterteilt wird:
Asp.net-Kern-MVC-Filter ExceptionFilter-Filter (1)
Asp.net-Kern-MVC-Filter ActionFilter Filter (2)
asp.net-Kern-MVC-Filter ResultFilter-Filter (3)
asp.net-Kern-MVC-Filter ResourceFilter-Filter (4)
AuthorizationFilter-Filter von asp.net Kern-MVC-Filter (5)
Einführung
Ausnahmefilter ist, wie der Name schon sagt, ein Filter, der bei Ausnahmen verwendet wird, wenn ein Programm auftritt. Wird zur Behandlung nicht abgefangener Ausnahmen im System verwendet.
Implementieren eines benutzerdefinierten Ausnahmefilters
Das Anpassen eines globalen Ausnahmefilters erfordert die Implementierung der IExceptionFilter-Schnittstelle
public class HttpGlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { throw new NotImplementedException(); } }
IExceptionFilter-Schnittstelle. Dies wird der Fall sein erforderlich, um die OnException-Methode zu implementieren, die ausgelöst wird, wenn eine nicht abgefangene Ausnahme im System auftritt. Die OnException-Methode verfügt über einen ExceptionContext-Ausnahmekontext, der spezifische Ausnahmeinformationen, HttpContext- und MVC-Routing-Informationen enthält. Sobald eine nicht erfasste Ausnahme im System auftritt, besteht ein gängiger Ansatz darin, ein Protokollierungstool zu verwenden, um die detaillierten Informationen der Ausnahme aufzuzeichnen, um Korrekturen und Debugging zu erleichtern. Nachfolgend finden Sie die Implementierung der Protokollierung.
/// <summary> /// 全局异常过滤器 /// </summary> public class HttpGlobalExceptionFilter : IExceptionFilter { readonly ILoggerFactory _loggerFactory; readonly IHostingEnvironment _env; public HttpGlobalExceptionFilter(ILoggerFactory loggerFactory, IHostingEnvironment env) { _loggerFactory = loggerFactory; _env = env; } public void OnException(ExceptionContext context) { var logger = _loggerFactory.CreateLogger(context.Exception.TargetSite.ReflectedType); logger.LogError(new EventId(context.Exception.HResult), context.Exception, context.Exception.Message); var json = new ErrorResponse("未知错误,请重试"); if (_env.IsDevelopment()) json.DeveloperMessage = context.Exception; context.Result = new ApplicationErrorResult(json); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.ExceptionHandled = true; } public class ApplicationErrorResult : ObjectResult { public ApplicationErrorResult(object value) : base(value) { StatusCode = (int)HttpStatusCode.InternalServerError; } } public class ErrorResponse { public ErrorResponse(string msg) { Message = msg; } public string Message { get; set; } public object DeveloperMessage { get; set; } }
Globalen Filter registrieren
Der Filter wurde geschrieben und muss dann im asp.net Core MVC registriert werden. Suchen Sie die Datei „Startup.cs“ im Stammverzeichnis des Systems und ändern Sie die Methode „ConfigureServices“ wie folgt:
services.AddMvc(options => { options.Filters.Add<HttpGlobalExceptionFilter>(); });
Test
Throw a in der Anfrage Ausnahme
Das Protokoll erfasst die Ausnahmeinformationen korrekt
Der Browser gibt einen 500-Fehler zurück und kehrt zurück eine angepasste Fehlermeldung.
Das obige ist der detaillierte Inhalt vonExceptionFilter-Filter in asp.net. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!