.net core webapi 自定义异常过滤器
1.定义统一返回格式
namespace webapi;/// <summary>
/// 统一数据响应格式
/// </summary>
public class Results<T>
{/// <summary>/// 自定义的响应码,可以和http响应码一致,也可以不一致/// </summary>public int Code { get; set; }/// <summary>/// 中文消息提示/// </summary>public string? Msg { get; set; }/// <summary>/// 是否成功/// </summary>public bool Success { get; set; }/// <summary>/// 响应的数据/// </summary>public T? Data { get; set; }/// <summary>/// 返回的Token: 如果有值,则前端需要此这个值替旧的token值/// </summary>public string? Token { get; set; }/// <summary>/// 设置数据的结果/// </summary>/// <param name="data">数据</param>/// <returns></returns>public static Results<T> DataResult(T data){return new Results<T> { Code = 1, Data = data, Msg = "请求成功", Success = true };}/// <summary>/// 响应成功的结果/// </summary>/// <param name="msg"></param>/// <returns></returns>public static Results<T> SuccessResult(string msg = "操作成功"){return new Results<T> { Code = 1, Data = default, Msg = msg, Success = true };}/// <summary>/// 响应失败的结果/// </summary>/// <param name="msg"></param>/// <returns></returns>public static Results<T> FailResult(string msg = "请求失败"){return new Results<T> { Code = -1, Data = default, Msg = msg, Success = false };}/// <summary>/// 参数有误/// </summary>/// <param name="msg"></param>/// <returns></returns>public static Results<T> InValidParameter(string msg = "参数有误"){return new Results<T> { Code = -1, Data = default, Msg = msg, Success = false };}/// <summary>/// 获取结果/// </summary>/// <param name="code"></param>/// <param name="msg"></param>/// <param name="data"></param>/// <param name="success"></param>/// <returns></returns>public static Results<T> GetResult(int code = 0, string? msg = null, T? data = default, bool success = true){return new Results<T> { Code = code, Data = data, Msg = msg, Success = success };}/// <summary>/// 设置token结果/// </summary>/// <param name="token"></param>/// <returns></returns>public static Results<T> TokenResult(string token){return new Results<T> { Code = 1, Data = default, Msg = "请求成功", Success = true, Token = token };}
}
2.定义异常过滤器
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;namespace webapi
{/// <summary>/// 全局异常过滤器/// </summary>public class ExceptionFilter : Attribute, IExceptionFilter{private readonly ILogger<ExceptionFilter> _logger;public ExceptionFilter(ILogger<ExceptionFilter> logger){_logger = logger;}/// <summary>/// 当发生异常的时候会执行此方法/// </summary>/// <param name="context"></param>/// <exception cref="NotImplementedException"></exception>public void OnException(ExceptionContext context){var values = context.RouteData.Values;var controller = values["controller"];var action = values["action"];_logger.LogError($"控制器:{controller},方法:{action},详细信息:\n");WriteDetailErrorMsg(context.Exception);context.Result = new JsonResult(Results<string>.FailResult(context.Exception.Message));}/// <summary>/// 递归获取内部异常信息/// </summary>/// <param name="exception"></param>/// <returns></returns>private void WriteDetailErrorMsg(Exception exception){if (exception.InnerException != null){_logger.LogError(exception.StackTrace + "\n\n");WriteDetailErrorMsg(exception.InnerException);}else{_logger.LogError("报错:" + exception.Message);_logger.LogError("堆栈跟踪:" + exception.StackTrace);}}}
}
3.在控制器注入自定义的异常过滤器
builder.Services.AddControllers(opt => {opt.Filters.Add<ExceptionFilter>();});
4.定义一个错误的api接口
[HttpDelete]public ActionResult Detele(){int i = 0;//除数不能为0;return Content((1 / i).ToString());}
5.访问api接口

错误信息全记录到了,并输出到控制台,这里可以记录日志到文本文件或数据库。
相关文章:
.net core webapi 自定义异常过滤器
1.定义统一返回格式 namespace webapi;/// <summary> /// 统一数据响应格式 /// </summary> public class Results<T> {/// <summary>/// 自定义的响应码,可以和http响应码一致,也可以不一致/// </summary>public int Co…...
SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载
作者:yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务,您可以在发布服务时直接勾选ArcGIS REST地图服务,如下图所示: 也可以在已发布的地图服务中&#x…...
python调用GPT API
每次让gpt给我生成一个调用api的程序时,他经常会调用以前的一些api的方法,导致我的程序运行错误,所以这期记录一下使用新的方法区调用api 参考网址 Migration Guide,这里简要地概括了一下新版本做了哪些更改 OpenAI Python API l…...
ModuleNotFoundError: No module named ‘tensorflow‘
直接运行pip install tensorflow安装成功之后,发现版本是tensorflow2.15.0 python的版本是3.9版本 导入包:import tensorflow 打包xxx.exe,调用之后提示错误 ModuleNotFoundError: No module named tensorflow 最后发现特定的python的版本对应特定的t…...
智能优化算法应用:基于鹰栖息算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于鹰栖息算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鹰栖息算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹰栖息算法4.实验参数设定5.算法结果6.参考文…...
自定义Taro上传图片hooks(useUploadImg)
有两个方法需要提前引入 FileUtil(上传文件的方法)、to(对请求接口返回做了二次处理,数据和错误提示等) //FileUtil export namespace FileUtil {const env {timeout: 10000,uploadImageUrl: "阿里云的地址",};const genPolicy …...
量子密码学简介
量子密码学(英语:Quantum cryptography)泛指利用量子力学的特性来加密的科学。量子密码学最著名的例子是量子密钥分发,而量子密钥分发提供了通信两方安全传递密钥的方法,且该方法的安全性可被信息论所证明。目前所使用…...
使用docker创建自己的Android编译容器
文章目录 背景步骤1.创建Dockerfile2.编写Dockerfile指令3.编译4.使用 背景 每次拿到新机器或者系统重装,最麻烦的就是各种环境配置,最近学习了一下docker的知识,用dockerfile创建一个Android编译容器,这样就不用每次都吭哧吭哧的…...
4-Docker命令之docker load
1.docker load介绍 docker load命令是用来将从tar归档文件载入镜像 docker load命令相对应的命令是docker save 2.docker load用法 docker load [参数] [root@centos79 ~]# docker load --helpUsage: docker load [OPTIONS]Load an image from a tar archive or STDINAli…...
微信小程序格创校园跑腿小程序源码v1.1.64+前端
简介: 版本号:1.1.64 – 多学校版本 本次更新内容: 订单问题修复 (无需上传小程序) 版本号:1.1.63 – 多学校版本 本次更新内容: 失物招领增加内容安全接口; 认证增加性别选…...
【单元测试】测还是不测,这是一个问题
这篇文章也可以在我的博客中查看 “册”那!! 相信大家从小就被千叮万嘱要做单元测试。然后秉承这一信念,成为了一个测试狂魔。凡有代码,测!覆盖!最终,一波操作猛如虎:467测试&…...
Global Mapper SDK 19 中文开发文档(八)
7.2.8 GM_DBUtil (1)声明 public static class GM_DBUtil (2)方法 方法描述DBGetTableList获取指定空间数据库中的表列表DBIsDatabaseFile指示输入文件是否为数据库(Esri地理数据库、Spatialite等)DBMa…...
es检索之复合检索
背景:向量检索是文本相似度检索,现在增加新的字段进行过滤,如果以filter方式进行过滤,那么最终结果不保证有topK个,甚至一个都没有,因为它是先进行topK个向量召回,再进行filter。 当然有人建议采用scriptScore方式进行检索,但此方式可能造成请求压力过大,内存消耗。 …...
09.list 容器
9、list 容器 功能: 将数据进行链式存储 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成: 链表由一系列结点组成 结点的组成: 一个是存…...
速盾网络:网站用速盾cdn的好处
随着互联网的快速发展,网站的速度和稳定性成为了用户访问体验的关键因素。为了提高网站的性能和可用性,许多网站开始使用CDN(Content Delivery Network)服务。本文将介绍CDN的基本概念、工作原理以及使用CDN的好处。一、CDN的基本…...
Centos7在安装Graylog时新安装MongoDB报错端口不监听服务不启动无法运行启动失败
由于虚拟机服务器上需要安装Graylog需要安装MongoDB,尝试官网下载安装包,和yum安装均无法正常启动,折腾了好几天,重装了十几次,网上搜索了很多很多资料,均无法正常运行,百度上搜索各种文档&…...
Spark Machine Learning进行数据挖掘的简单应用(兴趣预测问题)
数据挖掘的过程 数据挖掘任务主要分为以下六个步骤: 1.数据预处理2.特征转换3.特征选择4.训练模型5.模型预测6.评估预测结果 数据准备 这里准备了20条关于不同地区、不同性别、不同身高、体重…的人的兴趣数据集(命名为hobby.csv): id,h…...
DRF从入门到精通二(Request源码分析、DRF之序列化、反序列化、反序列化校验、序列化器常用字段及参数、source、定制字段、保存数据)
文章目录 一、Request对象源码分析区分原生request和新生request新的request还能像原来的reqeust一样使用吗源码片段分析总结: 二、DRF之序列化组件序列化介绍序列化步骤序列化组件的基本使用反序列化基本使用反序列化的新增反序列化的新增删除单条 反序列化的校验序…...
Flink系列之:Upsert Kafka SQL 连接器
Flink系列之:Upsert Kafka SQL 连接器 一、Upsert Kafka SQL 连接器二、依赖三、完整示例四、可用元数据五、键和值格式六、主键约束七、一致性保证八、为每个分区生成相应的watermark九、数据类型映射 一、Upsert Kafka SQL 连接器 Scan Source: Unbounded 、Sink…...
前端与后端的异步编排(promise、async、await 、CompletableFuture)
前端与后端的异步编排 文章目录 前端与后端的异步编排1、为什么需要异步编排2、前端中的异步2.1 、Promise的使用2.1.1、Promise的基础概念2.1.2、Promise中的两个回调函数2.1.3、工具方法1、Promise.all()2、Promise.race()3、Promise.resolve() 2.2 、async 与 aw…...
大语言模型角色扮演技术:从原理到实践的完整指南
1. 项目概述:当大语言模型学会“扮演”角色最近在GitHub上看到一个挺有意思的项目,叫“awesome-llm-role-playing-with-persona”。光看名字,你大概能猜到它和大型语言模型以及角色扮演有关。简单来说,这个项目整理了一个资源列表…...
Wonder3D:用一张照片开启3D建模新纪元
Wonder3D:用一张照片开启3D建模新纪元 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 还在为复杂的3D建模软件头疼吗?今天我要向你介绍一…...
使用 Taotoken 后如何通过用量看板清晰掌握各模型消耗与成本分布
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Taotoken 后如何通过用量看板清晰掌握各模型消耗与成本分布 当你在项目中接入多个大模型时,一个常见的困扰是成本…...
Taotoken官方折扣与活动价接入实践带来的成本节省感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken官方折扣与活动价接入实践带来的成本节省感受 1. 背景与决策起点 作为个人开发者或小团队,在构建基于大模型的…...
别只盯着原理图:聊聊Cadence Virtuoso里带隙基准的版图匹配那些坑
带隙基准版图匹配实战:从原理图到后仿真的关键陷阱解析 当你在Cadence Virtuoso中完成了一个温漂仅2.6ppm的带隙基准电路设计,原理图仿真结果堪称完美——直到你开始画版图。这时你会发现,那些在原理图中对称排列的晶体管,在实际硅…...
你的差速小车为什么画圈不准?可能是数学模型离散化没搞对(避坑指南)
差速小车控制精度优化:从数学模型离散化到工程实践 差速轮式机器人作为移动机器人领域的经典平台,其控制精度直接影响路径跟踪、自主导航等核心功能的可靠性。许多开发者在STM32、Arduino或嵌入式ROS系统上实现了基础运动控制后,往往会遇到一…...
Python小说爬虫框架NovelClaw:模块化设计与规则驱动实践
1. 项目概述:一个为小说爱好者打造的智能采集与整理工具如果你和我一样,是个重度小说爱好者,同时又有点技术背景,那你肯定遇到过这样的烦恼:追更的小说散落在十几个不同的网站,更新提醒全靠缘分;…...
WechatSogou微信公众号爬虫实战指南:高效获取公众号数据的Python解决方案
WechatSogou微信公众号爬虫实战指南:高效获取公众号数据的Python解决方案 【免费下载链接】WechatSogou 基于搜狗微信搜索的微信公众号爬虫接口 项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou 在信息爆炸的时代,微信公众号已成为内容…...
告别手动刷新!为你的Qt串口调试助手添加‘设备热插拔’自动感知功能
告别手动刷新!为你的Qt串口调试助手添加‘设备热插拔’自动感知功能 在嵌入式开发和硬件调试过程中,串口工具是不可或缺的得力助手。然而,大多数基础串口调试软件都存在一个令人困扰的痛点——当设备突然断开或新设备接入时,用户不…...
从提示词到技能笔记:构建可复用AI工作流的核心方法
1. 项目概述:从“提示词”到“技能笔记”的认知跃迁最近在折腾AI应用开发的朋友,估计没少被“提示词工程”这个词刷屏。从最初的简单指令,到如今动辄上千字的复杂结构化提示,我们与AI的交互方式正在经历一场深刻的变革。但不知道你…...
