asp.net core MVC 전역 필터 의 ExceptionFilter 필터(1)

이 클래스 는 asp.net core MVC 에 내 장 된 전역 필터 의 사용 을 설명 합 니 다.다음 장 으로 나 눌 것 입 니 다.
asp.net core MVC 필터 의 ExceptionFilter 필터(1)
asp.net core MVC 필터 의 ActionFilter 필터(2)
asp.net core MVC 필터 의 ResultFilter 필터(3)
asp.net core MVC 필터 의 리 소스 필터(4)
asp.net core MVC 필터 의 AuthorizationFilter 필터(5)
간단 한 소개
이상 필 터 는 말 그대로 프로그램 에 이상 이 생 겼 을 때 사용 하 는 필터 입 니 다.시스템 에 캡 처 되 지 않 은 이상 이 발생 했 을 때 처리 합 니 다.
사용자 정의 이상 필터 구현
전역 이상 필 터 를 사용자 정의 하려 면 IExceptionFilter 인터페이스 가 필요 합 니 다.

public class HttpGlobalExceptionFilter : IExceptionFilter
  {
    public void OnException(ExceptionContext context)
    {
      throw new NotImplementedException();
    }
  }
IException Filter 인 터 페 이 스 는 OnException 방법 을 요구 합 니 다.시스템 에 캡 처 되 지 않 은 이상 이 발생 하면 이 방법 을 촉발 합 니 다.OnException 방법 에는 ExceptionContext 이상 컨 텍스트 가 있 는데 그 중에서 구체 적 인 이상 정보,HttpContext 와 뮤 직 비디오 경로 정보 가 포함 되 어 있 습 니 다.시스템 에 캡 처 되 지 않 은 이상 이 발생 하면 로그 도 구 를 사용 하여 이상 한 상세 한 정 보 를 기록 하여 디 버 깅 을 수정 하 는 것 이 흔 하 다.다음은 로그 기록 의 실현 이다.  

  /// <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>();
      });
테스트
요청 중 이상 을 던 집 니 다.

로그 에서 이상 정 보 를 정확하게 캡 처 하 였 습 니 다.

브 라 우 저 는 500 오 류 를 되 돌려 주 고 사용자 정의 오류 정 보 를 되 돌려 줍 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기