Heim  >  Artikel  >  Backend-Entwicklung  >  ExceptionFilter-Filter in asp.net

ExceptionFilter-Filter in asp.net

巴扎黑
巴扎黑Original
2017-09-01 15:07:371988Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn