이 글에서는 주로 asp.net 코어 MVC 글로벌 필터의 ExceptionFilter 필터를 자세히 소개합니다. 여기에는 특정 참조 값이 있습니다. 관심 있는 친구는 이를 참조할 수 있습니다.
이 시리즈에서는 asp.net 코어에 내장된 글로벌 필터의 사용을 설명합니다. MVC는 다음 장으로 나뉩니다
asp.net 코어 MVC 필터 - ExceptionFilter 필터(1)
asp.net 코어 MVC 필터 - ActionFilter 필터(2)
asp .net 코어 MVC 필터 ResultFilter 필터(3)
asp.net core MVC 필터 ResourceFilter 필터 (4)
asp.net core MVC 필터 AuthorizationFilter 필터 (5)
Introduction
Exception 필터는 이름에서 알 수 있듯이 예외가 발생할 때 사용되는 필터입니다. 프로그램. 시스템에서 포착되지 않은 예외를 처리하는 데 사용됩니다.
사용자 정의 예외 필터 구현
전역 예외 필터를 사용자 정의하려면 IExceptionFilter 인터페이스 구현이 필요합니다
public class HttpGlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { throw new NotImplementedException(); } }
IExceptionFilter 인터페이스에는 시스템에서 포착되지 않은 예외가 발생할 때 트리거되는 OnException 메서드 구현이 필요합니다. OnException 메서드에는 특정 예외 정보, HttpContext 및 mvc 라우팅 정보가 포함된 ExceptionContext 예외 컨텍스트가 있습니다. 시스템에서 포착되지 않은 예외가 발생하면 일반적인 접근 방식은 로깅 도구를 사용하여 예외에 대한 자세한 정보를 기록하여 수정 및 디버깅을 용이하게 하는 것입니다. 아래는 로깅 구현입니다.
/// <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; } }
전역 필터 등록
필터가 작성되었으니 asp.net core MVC에 등록해야 합니다. 시스템 루트 디렉터리에서 Startup.cs 파일을 찾고 다음과 같이 ConfigureServices 메서드를 수정합니다
services.AddMvc(options => { options.Filters.Add<HttpGlobalExceptionFilter>(); });
Test
요청에서 예외를 발생시킵니다
로그가 예외 정보를 올바르게 캡처합니다
브라우저는 500 오류를 반환하고 사용자 정의된 오류 정보를 반환합니다.
위 내용은 asp.net의 ExceptionFilter 필터의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!