旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

asp.net之ExceptionFilter过滤器【C#.Net教程】,ExceptionFilter,asp.net,过滤器

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:25评论:0


导读:这篇文章主要为人人细致引见了asp.netcoreMVC全局过滤器之ExceptionFilter过滤器,具有肯定的参考价值,感兴趣的小伙伴们能够参考一下本系类将会解...
这篇文章主要为人人细致引见了asp.net core MVC 全局过滤器之ExceptionFilter过滤器,具有肯定的参考价值,感兴趣的小伙伴们能够参考一下

本系类将会解说asp.net core MVC中的内置全局过滤器的运用,将分为以下章节

  asp.net core MVC 过滤器之ExceptionFilter过滤器(一)

  asp.net core MVC 过滤器之ActionFilter过滤器(二)

  asp.net core MVC 过滤器之ResultFilter过滤器(三)

  asp.net core MVC 过滤器之ResourceFilter过滤器(四)

  asp.net core MVC 过滤器之AuthorizationFilter过滤器(五)  

简介

非常过滤器,望文生义,就是当顺序发作非常时所运用的过滤器。用于在体系涌现未捕捉非常时的处置惩罚。

完成一个自定义非常过滤器

自定义一个全局非常过滤器须要完成IExceptionFilter接口


public class HttpGlobalExceptionFilter : IExceptionFilter
  {
    public void OnException(ExceptionContext context)
    {
      throw new NotImplementedException();
    }
  }

IExceptionFilter接口会要求完成OnException要领,当体系发作未捕捉非常时就会触发这个要领。OnException要领有一个ExceptionContext非常上下文,个中包含了详细的非常信息,HttpContext及mvc路由信息。体系一旦涌现未捕捉非常后,比较罕见的做法就是运用日记东西,将非常的细致信息纪录下来,轻易修正调试。下面是日记纪录的完成。  


  /// <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毛病,而且返回自定义的毛病信息。

以上就是asp.net之ExceptionFilter过滤器的细致内容,更多请关注ki4网别的相干文章!

标签:ExceptionFilterasp.net过滤器


欢迎 发表评论: