首页 > 其他分享 >NETCORE - 全局异常处理(Exception)

NETCORE - 全局异常处理(Exception)

时间:2024-04-23 09:46:35浏览次数:13  
标签:Exception NETCORE 中间件 System public ex using Message 全局

NETCORE - 全局异常处理(Exception)

环境:.net6

创建异常中间件:ExceptionHandlingMiddleware.cs

using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace Rail.Medium.Middleware
{
    public class ExceptionHandlingMiddleware
    {


        private readonly RequestDelegate _next;  // 用来处理上下文请求  
        public ExceptionHandlingMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext httpContext)
        {
            try
            {
                await _next(httpContext); //要么在中间件中处理,要么被传递到下一个中间件中去
            }
            catch (Exception ex)
            {
                await HandleExceptionAsync(httpContext, ex); // 捕获异常了 在HandleExceptionAsync中处理
            }
        }
        private async Task HandleExceptionAsync(HttpContext context, Exception exception)
        {
            context.Response.ContentType = "application/json";  // 返回json 类型
            var response = context.Response;

            var errorResponse = new ErrorResponse
            {
                Success = false,
            };  // 自定义的异常错误信息类型

            switch (exception)
            {
                //case ApplicationException ex:
                //    if (ex.Message.Contains("Invalid token"))
                //    {
                //        response.StatusCode = (int)HttpStatusCode.Forbidden;
                //        errorResponse.Message = ex.Message;
                //        break;
                //    }
                //    response.StatusCode = (int)HttpStatusCode.BadRequest;
                //    errorResponse.Message = ex.Message;
                //    break;
                //case KeyNotFoundException ex:
                //    response.StatusCode = (int)HttpStatusCode.NotFound;
                //    errorResponse.Message = ex.Message;
                //    break;

                default:
                    response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    errorResponse.Message = exception.Message;// "Internal Server errors. Check Logs!";
                    break;
            }
            var result = JsonSerializer.Serialize(errorResponse);
            await context.Response.WriteAsync(result);
        }

        private class ErrorResponse
        {
            public bool Success { get; set; } = true;
            public string Message { get; set; }
        }
    }
}

  

使用中间件

在Program.cs 中引入中间件

app.UseMiddleware<ExceptionHandlingMiddleware>();

  

控制器中原写法

      [HttpGet]
        [Route("GetOrganizationSelectTreeAsync")]
        public async Task<ActionResult> GetOrganizationSelectTreeAsync()
        {
            try
            {
                var arr = await iUserOrganizationRepository.GetOrganizationSelectTreeAsync();
                return Ok(arr);
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }

  增加异常处理中间件后

       [HttpGet]
        [Route("GetOrganizationTreeAsync")]
        public async Task<ActionResult> GetOrganizationTreeAsync()
        {
            var arr = await iUserOrganizationRepository.GetOrganizationTreeAsync();
            return Ok(arr);
        }

  

 

 

 

 

 

 

 

 

 

 

 

end

 

标签:Exception,NETCORE,中间件,System,public,ex,using,Message,全局
From: https://www.cnblogs.com/1285026182YUAN/p/18152146

相关文章

  • StreamJsonRpc.ConnectionLostException 在请求完成之前, 与远程方的 JSON-RPC 连接已
    今天电脑重启之后,发现visualstudio2022的智能提示与报错经常性不好用,不光不能在正常时候提示代码错误信息,甚至在编译过后也不提示错误。反复重启,刚开始正常,隔一会儿就会提示什么什么功能不可用,点开打开详情,提示:StreamJsonRpc.ConnectionLostException:在请求完成之前,与远......
  • 前端【uniapp】02-uniapp【全局文件】【组件【内置、扩展】】【声明周期】【API调用】
    一、uni-app基础知识uni-app是组合了Vue和微信小程序的相关技术知识,要求大家同时俱备Vue和原生小程序的开发基础。1、全局文件在小程序中有全局样式、全局配置等全局性的设置,为此在uni-app中也有一些与之相对应的全局性的文件。uni.scssuni-app项目在运......
  • pytest + yaml 框架 -68.新增全局请求参数配置verify和headers
    前言最近有小伙伴提到如何全局添加请求参数verify=False和全局请求添加头部参数如:{"x-token":"xxx"}之前的版本可以用fixture解决,v1.5.8版本可以支持在config中配置fixture更新全局请求第一种解决方案,通过fixture来更新全局session会话[email protected](s......
  • 全局异常捕获及源码分析
    全局异常捕获​ drf只会捕获属于drf的异常,所以要做到全局异常捕获,还需要手动操作一下。​ 经过对drf异常处理组件的源码分析之后可以得知,其实就是自己定义一个exception_handler函数,然后全局替换一下即可​ 首先要知道,虽然是自己写一个exception_handler函数,但是drf的exception......
  • proxifier+v2代理软件实现真全局代理(防溯源)
    v2的使用这里就不详细说了打开v2,右下角可以看到端口开启v2代理后,打开proxifer先打开左上角的代理服务器按照以下配置,端口改成v2上面看到的socks5端口也可以左下角检查以下代理有没有问题,有时候可能是代理服务器卡了或者死了接着来到代理规则,按照以下配置......
  • 某游戏忍者全局过异常分析
    虽然这篇文章可能会涉及到某些人的利益,但我还是写了首先,我们先将手机与ce进行桥接(具体的教程b站有)然后我们先找到a内存的过异常(原理就是将当前怪物包改0,当前市面上广为流传的过异常都是这个原理)我们在ce中添加他的地址查看访问他的操作码(触发他)然后我们看到访问了他的......
  • System.AggregateException: 发生一个或多个错误.....
    System.AggregateException:发生一个或多个错误。--->Microsoft.WebTools.Shared.Exceptions.WebToolsException:生成失败。检查输出窗口了解更多详细信息。---内部异常堆栈跟踪的结尾------>(内部异常#0)Microsoft.WebTools.Shared.Exceptions.WebToolsException:生......
  • com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at S
     适用的druid数据库连接池一直有问题,无法连接,但是什么都没改过。排查了数据库(数据库单独连接没问题)、防火墙、IP白名单等步骤后,重启服务器、重启应用后都无法解决。重启应用过程中发现了应用无法正常启动的情况,这点让人觉得很意外,于是想看下现在服务器上运行的jar包情况,命令是......
  • [转]AspNetCore容器化(Docker)部署(二) —— 多容器通信
    一.前言着上一篇 AspNetCore容器化(Docker)部署(一)——入门,在单个容器helloworld的基础上引入nginx反向代理服务器组成多容器应用。 二.配置反向代理转接配置转接头。详见:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2......
  • [转]AspNetCore容器化(Docker)部署(一) —— 入门
    一.docker注册安装WindowsDockerDesktop https://www.docker.com/products/docker-desktopLinuxDockerCE https://docs.docker.com/install/linux/docker-ce/ubuntu/本文使用Windows环境Linuxcontainer做演示,安装完后切换到Linuxcontainer,“SwitchtoLinuxcontainers......