.net core 返回业务错误(不抛异常)
在开始之前你需要知道:
1、通过抛异常--全局捕获异常的方式返回业务错误信息性能是非常差的(不知道为什么的可以百度一下)
2、如何将错误信息绑定到mvc模型验证中
自定义返回内容

//返回内容接口
public interface IBusinessCodeStatus
{
// 业务状态码
public BusinessCode Code { get; set; } // 信息
public string Message { get; set; } // 错误级别
public ErrorLevel Level { get; set; } // 错误类型
public ErrorCategory Category { get; set; }
} //业务代码
public enum BusinessCode
{
Success = ,
Error =
} // 错误级别
public enum ErrorLevel
{
// 系统级
System,
// 业务级
Business
} // 错误类型
public enum ErrorCategory
{
// 空对象
EmptyObject,
// 通用
Currency
}
在这里我用结构体去包装返回的业务状态
为什么要用结构体?
因为结构体保存在栈中,在方法执行完后就会自动释放
如果是对象则会放在托管堆上,最后由GC去释放

public struct BusinessCodeStatus : IBusinessCodeStatus
{
public BusinessCode Code { get; set; }
public string Message { get; set; }
public ErrorLevel Level { get; set; }
public ErrorCategory Category { get; set; } public static readonly BusinessCodeStatus Success = new BusinessCodeStatus();//返回成功信息
}
定义Dto的模型基类

// 模型基类
public class BaseResult
{
// 业务状态
public BusinessCodeStatus ZCodeStatus { get; set; } = BusinessCodeStatus.Success; public void BadResult(string message, ErrorCategory category,
ErrorLevel level = ErrorLevel.Business, BusinessCode code = BusinessCode.Error)
{
ZCodeStatus = new BusinessCodeStatus
{
Category = category,
Message = message,
Code = code,
Level = level
};
} public void BadResult(string message)
{
ZCodeStatus = new BusinessCodeStatus
{
Message = message,
};
} public static readonly BaseResult Success = new BaseResult();
}
下面开始举一个栗子
模型
public class DtoUser : BaseResult
{
public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; }
}
业务层
public class UserBll
{
public DtoUser GetUser_Error()
{
var user = new DtoUser();
user.BadResult("业务出错了!!!!");
//这个地方处理不太优雅
//当时想模仿IActionResult做成接口,但是这样子就会高度定制化
//就会导致影响编码习惯
//所以在这里我就舍弃了优雅 ^_^
return user;
} //成功返回结果
public DtoUser GetUser_Success()
{
//一系列的业务处理之后得到结果
return new DtoUser
{
Id = ,
Age = ,
Name = "张三",
Sex = "男"
}; ;
}
}
控制器层
[Route("values")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly UserBll _userBll;
public ValuesController()
{
_userBll = new UserBll();
}
[HttpGet("success")]
public string GetResult_Success()
{
var model = _userBll.GetUser_Success();
return "成功";
}
[HttpGet]
public string GetResult_Error()
{
var model = _userBll.GetUser_Error();
if (model.ZCodeStatus.Code == BusinessCode.Error)
return model.ZCodeStatus.Message;
return "成功";
}
}
这样子就可以将业务层的错误信息抛至接口层
然后定制化400给前端显示(这里可以绑定模型验证)
.net core 返回业务错误(不抛异常)的更多相关文章
- Ext JS 5 关于Store load返回json错误信息或异常的处理
关于在store load的时候服务器返回错误信息或服务器出错的处理.ExtJS4应该也能用,没测试过. 这里有两种情况: 服务器返回错误json错误信息,状态为200 服务器异常,状态为500 一. ...
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...
- .net core 抛异常对性能影响的求证之路
一.前言 在.net 社区中曾经听到过很多关于大量抛异常会影响性能这样的结论,心中一直就存在各种疑问.项目中使用自定义异常来处理业务很爽,但是又担心大量抛业务异常存在性能问题. 查阅了各种文档,微软官 ...
- 窥探Swift编程之错误处理与异常抛出
在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中 ...
- 记一次asp.net core 在iis上运行抛出502.5错误
asp.net core 在iis上运行抛出502.5异常的部分原因以及解决方案 环境说明 已安装 .net core runtime 2.1.401 已安装 .net core windows ho ...
- 扩展方法where方法查询不到数据,不会抛异常,也不是返回的null
如题,“扩展方法where方法查询不到数据,不会抛异常,也不是返回的null”,示例代码如下: Product类: public class Product { private string name ...
- OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常
OpenJDK源码研究笔记系列文章,是我在阅读OpenJDK7源码的过程中的一些体会.收获.看法. 把研究过程中的成长和收获一点点地整理出来,是对自己研究学习的一个小结,也有可能给学习Java的一些同 ...
- java通过抛异常来返回提示信息
结论:如果把通过抛异常的方式得到提示信息,可以使用java.lang.Throwable中的构造函数: public Throwable(String message) { fillInStackTr ...
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...
随机推荐
- 剑指 Offer 53 - II. 0~n-1中缺失的数字
本题 题目链接 题目描述 我的题解 二分法 思路分析 排序数组中的搜索问题,首先想到二分法 当nums[center] > center 时,缺少的数在左区间 当nums[center] = c ...
- Android JNI之静态注册
这篇说静态注册,所谓静态注册,就是native的方法是直接通过方法名的规定格式和Java端的声明处代码对应起来的,其对应规则如下: JNIEXPORT <返回值> JNICALL Java ...
- day5.流程控制及while单项循环
一.判断类型 isinstance 1.语法 """ 语法: # 用法一 isinstance(要判断的值,要判断的类型) 返回True 或者 False # 用法二 i ...
- TestFlight无法访问怎么办?TF如何链接AppStoreConnect解决教程
最近苹果商店半天下架近3万款应用的新闻闹的沸沸扬扬,很多被下架应用的运营商转将APP上架了TestFlight内测商店(TF签名上架),但是从7月31日起很多用户就开始反映TestFlight内测应用 ...
- Serverless无服务器架构详解
本文对Serverless架构的基础概念.具体产品.应用场景.工作原理进行详细解析. 基础概念 Serverless: 无服务器架构,即在无需管理服务器等底层资源的情况下完成应用的开发和运行,是云原生 ...
- Kaggle-pandas(4)
Grouping-and-sorting 教程 映射使我们可以一次将整个列中的数据转换为DataFrame或Series中的一个值. 但是,通常我们希望对数据进行分组,然后对数据所在的组进行特定的操作 ...
- Python中匿名函数与内置高阶函数详解
大家好,从今天起早起Python将持续更新由小甜同学从 初学者的角度 学习Python的笔记,其特点就是全文大多由 新手易理解 的 代码与注释及动态演示 .刚入门的读者千万不要错过! 很多人学习pyt ...
- vue中methods互相调用的方法
a:function(goods) { this.aa= []; this.bb= 0; this.cc= 0; }, b:function(){ if(this.bbb!= 0){ this.aa= ...
- C# ASP 分析器错误信息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
在本地运行的应用,部署到服务器上出现错误.原因是web.config 中:<compilation debug="true" targetFramework="4. ...
- Nginx安装与运行配置总结
Nginx安装与运行配置总结 1. 去官网下载对应的nginx包,推荐使用稳定版本 2. 上传nginx到linux系统 3. 安装依赖环境 (1)安装gcc环境 yun install gcc-c+ ...