Cet article présente principalement en détail le filtre ExceptionFilter du filtre global asp.net core MVC, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
Cette série de cours expliquera l'utilisation du. filtre global intégré dans asp.net core MVC, qui sera divisé dans les chapitres suivants
asp.net core MVC filter ExceptionFilter filter (1)
asp.net core MVC filter ActionFilter filtre (2)
filtre MVC de base asp.net Filtre ResultFilter (3)
filtre MVC de base asp.net Filtre ResourceFilter (4)
Filtre AuthorizationFilter d'asp.net filtre MVC de base (5)
Introduction
Le filtre d'exception, comme son nom l'indique, est lorsqu'un programme se produit. Filtre à utiliser sur les exceptions. Utilisé pour gérer les exceptions non interceptées dans le système.
Implémentation d'un filtre d'exception personnalisé
La personnalisation d'un filtre d'exception global nécessite l'implémentation de l'interface IExceptionFilter
public class HttpGlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { throw new NotImplementedException(); } }
Interface IExceptionFilter Ce sera requis pour implémenter la méthode OnException, qui sera déclenchée lorsqu'une exception non interceptée se produit dans le système. La méthode OnException possède un contexte d'exception ExceptionContext, qui contient des informations d'exception spécifiques, HttpContext et des informations de routage mvc. Lorsqu'une exception non détectée se produit dans le système, une approche courante consiste à utiliser un outil de journalisation pour enregistrer les informations détaillées de l'exception afin de faciliter la correction et le débogage. Vous trouverez ci-dessous la mise en œuvre de la journalisation.
/// <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; } }
Enregistrer le filtre global
Le filtre a été écrit, puis il doit être enregistré dans asp.net core MVC. Recherchez le fichier Startup.cs dans le répertoire racine du système et modifiez la méthode ConfigureServices comme suit
services.AddMvc(options => { options.Filters.Add<HttpGlobalExceptionFilter>(); });
Test
Throw a dans la demande Exception
Le journal capture correctement les informations d'exception
Le navigateur renvoie une erreur 500 et renvoie un message d'erreur personnalisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!