>  기사  >  백엔드 개발  >  asp.net의 ExceptionFilter 필터

asp.net의 ExceptionFilter 필터

巴扎黑
巴扎黑원래의
2017-09-01 15:07:372048검색

이 글에서는 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.