一、Configure

  Startup.cs中的Configure方法主要是http处理管道配置、中间件和一些系统配置,其中
  IApplicationBuilder: 定义一个类,该类提供配置应用程序请求的机制管道。通过IApplicationBuilder下的run、use方法传入管道处理方法。这是最常用方法,对于一个真实环境的应用基本上都需要比如权限验证、跨域、异常处理等。
  IHostingEnvironment:提供有关正在运行的应用程序的web托管环境的信息
       简单来说Configure方法就是来加载一些中间件以及处理一些管道配置和系统配置的,下面看下什么是中间件。
 

二、Middleware

       Middleware  中间件是一个处理http请求和响应的组件,多个中间件构成了处理管道(Handler pipeline),每个中间件可以决定是否传递至管道中的下一中间件。
       注册--一旦注册中间件后,每次请求和响应均会被调用。中间件的注册在startup中的Configure方法完成,在configure方法中使用IApplicationBuilder对象的Run、Map、Use方法传入匿名委托(delegate)。
       具体例子我们一起看下ErrorHandlingMiddleware,如何注册中间件的以及使用的。

三、ErrorHandlingMiddleware

3.1、为什么使用ErrorHandlingMiddleware全局异常捕获

              有些时候项目总会出现一些始料未及的错误,项目启动瞬间崩塌。一脸懵,都不知道咋回事。刚启动就完事儿了。还有的情况测试接口的时候,打了断点,然后运行项目。偏偏死活不进断点。结果返回一个200ok,
  甚是恼火。这时候ErrorHandlingMiddleware就起作用了,不管应该运行如何,至少会进入ErrorHandlingMiddleware方法,一旦报错也会出现错误信息,这样我们也就能好快的解决问题。而且ErrorHandlingMiddleware简单,方便快捷。

3.2、构建ErrorHandlingMiddleware方法

                          

 public class ErrorHandlingMiddleware
{
private readonly RequestDelegate next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context /* other dependencies */)
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
} }
private static Task HandleExceptionAsync(HttpContext context, Exception ex)
{
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
var Info = "";
switch (context.Response.StatusCode)
{
case :
Info = "没有权限";
break;
case :
Info = "未找到服务";
break;
case :
Info = "服务器理解请求客户端的请求,但是拒绝执行此请求";
break;
case :
Info = "服务器内部错误,无法完成请求";
break;
case :
Info = "请求错误";
break;
default:
Info = "内部错误";
break;
}
LogHelp.Error(ex);
var result = JsonConvert.SerializeObject(new { error = ex.Message });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
}
 
              不管如何,项目运行了都会进入Invoke方法,一旦出现错误的话就会进入HandleExceptionAsync方法,记录错误然后返回错误信息

3.3、注册中间件使用

  在Startup.cs中的Configure方法中加上中间件的注册。
 
app.UseMiddleware(typeof(ErrorHandlingMiddleware));
 
  然后就可以尝试下了,在Invoke方法打上断点,然后运行项目,会发现,项目会先运行到Invoke方法。
 
 
 

  欢迎大家扫描下方二维码,和我一起学习更多的知识

Configure、中间件与ErrorHandlingMiddleware全局异常捕获的更多相关文章

  1. .NET Core整合log4net以及全局异常捕获实现

    在使用log4net之前先安装log4net.这里操作很简单,通过nuget下载并安装log4net很方便.如下图. log4net配置 <?xml version="1.0" ...

  2. MVC 好记星不如烂笔头之 ---> 全局异常捕获以及ACTION捕获

    public class BaseController : Controller { /// <summary> /// Called after the action method is ...

  3. atitit.js浏览器环境下的全局异常捕获

    atitit.js浏览器环境下的全局异常捕获 window.onerror = function(errorMessage, scriptURI, lineNumber) { var s= JSON. ...

  4. C#中的那些全局异常捕获

    1.WPF全局捕获异常     public partial class App : Application     {         public App()         {    // 在异 ...

  5. Spring-MVC开发之全局异常捕获全面解读

    异常,异常 我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个! 产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息! 在用Spring MVC开发WEB应用时捕获全局异常的方法基本有 ...

  6. Asp.Net MVC3(三)-MvcApp实现全局异常捕获

    定义异常捕获类: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMu ...

  7. 使用spring利用HandlerExceptionResolver实现全局异常捕获

    最近一直没有时间更新是因为一直在更新自己使用的框架. 之后会慢慢带来对之前使用的spring+mvc+mybatis的优化. 会使用一些新的特性,实现一些新的功能. 我会尽量分离业务,封装好再拿出来. ...

  8. .Net下的全局异常捕获问题

    全局异常捕获主要目标并不是为了将异常处理掉防止程序崩溃.因为当错误被你的全局异常捕获器抓到的时候,已经证实了你程序中存在BUG. 一般而言,我们的全局异常捕获主要作用就是接收到异常之后进行异常的反馈. ...

  9. (转)C#中的那些全局异常捕获

    C#中的那些全局异常捕获(原文链接:http://www.cnblogs.com/taomylife/p/4528179.html)   1.WPF全局捕获异常       public partia ...

随机推荐

  1. 201621123005《Java程序设计》实验总结

    201621123005<Java程序设计>第七次实验总结 1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最 ...

  2. self-taught learning setting && semi-supervised learning

    参考文献: 摘于上文献: The more general and powerful setting is the self-taught learning setting, which does n ...

  3. 【idea】idea的常规设置

    [一]在输入框输入字符,自动提示代码 File->Power Save Mode  去掉“对号” [二]自动代码提示的快捷键设置 (1)不区分大小写提示 (2)修改快捷提示快捷键.将basic= ...

  4. QLoo graphql engine 学习一 基本试用(docker&&docker-compose)

      说明:使用docker-compose 进行安装 代码框架 使用命令行工具创建 qlooctl install docker qloo-docker 运行qloo&&gloo 启动 ...

  5. minio 集群搭建

      具体实际的取舍可以参考官方文档,我使用的是4 node 4 driver 模式 环境机器说明 192.168.31.2 192.168.31.3 192.168.31.4 192.168.31.5 ...

  6. asp.net(C#)链接Oracle连接字符串

    在NET环境中链接Oracle数据库有两种组建链接方式: 1)使用OleDB组件是通过Oracle OleDB驱动程序(OraOLEDB.dll)连接和访问Oracle数据库2)使用System.Da ...

  7. bitmapdata的知识点

    flashplayer的cpu渲染 bitmapData占用的内存分两块,一块是原始数据区,另一块是解压后的内存区10秒内如果没有使用这个bitmapdata,解压后的内存区会被释放,当10秒后重新使 ...

  8. sublime Text 3安装sublimecodeIntel插件

    下载:https://github.com/SublimeCodeIntel/SublimeCodeIntel   解压到:  data/pacakges目录 安装 Package Control插件 ...

  9. Web自动化测试框架Watir(基于Ruby) - 第1章 Windows下安装与部署

    一.前言 Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将Web自动化测试应用于工作中,进而形成能够独立成章的博文,希望能够 ...

  10. 玩转Panabit 2008 Live CD到U盘,Panabit随身行

    直接将Panabit 2008 Live CD的内容复制到U盘,即把Live CD转成U盘启动盘,U盘可写,方便保存配置.要能正常使用,必须机器支持USB启动,才能用上:但是熟悉此方法,同样可以灵活用 ...