在开始之前你需要知道:

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 返回业务错误(不抛异常)的更多相关文章

  1. Ext JS 5 关于Store load返回json错误信息或异常的处理

    关于在store load的时候服务器返回错误信息或服务器出错的处理.ExtJS4应该也能用,没测试过. 这里有两种情况: 服务器返回错误json错误信息,状态为200 服务器异常,状态为500 一. ...

  2. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  3. .net core 抛异常对性能影响的求证之路

    一.前言 在.net 社区中曾经听到过很多关于大量抛异常会影响性能这样的结论,心中一直就存在各种疑问.项目中使用自定义异常来处理业务很爽,但是又担心大量抛业务异常存在性能问题. 查阅了各种文档,微软官 ...

  4. 窥探Swift编程之错误处理与异常抛出

    在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中 ...

  5. 记一次asp.net core 在iis上运行抛出502.5错误

    asp.net core 在iis上运行抛出502.5异常的部分原因以及解决方案 环境说明 已安装 .net core runtime 2.1.401 已安装 .net core windows ho ...

  6. 扩展方法where方法查询不到数据,不会抛异常,也不是返回的null

    如题,“扩展方法where方法查询不到数据,不会抛异常,也不是返回的null”,示例代码如下: Product类: public class Product { private string name ...

  7. OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常

    OpenJDK源码研究笔记系列文章,是我在阅读OpenJDK7源码的过程中的一些体会.收获.看法. 把研究过程中的成长和收获一点点地整理出来,是对自己研究学习的一个小结,也有可能给学习Java的一些同 ...

  8. java通过抛异常来返回提示信息

    结论:如果把通过抛异常的方式得到提示信息,可以使用java.lang.Throwable中的构造函数: public Throwable(String message) { fillInStackTr ...

  9. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

随机推荐

  1. 4.28 省选模拟赛模拟赛 最佳农场 二维卷积 NTT

    第一次遇到二维卷积 不太清楚是怎么做的. 40分暴力比对即可. 对于行为或者列为1时 容易想到NTT做快速匹配.然后找答案即可. 考虑这是一个二维的比对过程. 设\(f_{i,j}\)表示以i,j为右 ...

  2. ZROI 提高十连测 Day1

    第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号 ...

  3. charles抓取HTTPS设置,详细踩坑版

    写这篇文章的背景就是,每次我在一台新电脑上用charles抓包时,总是因为各种原因无法抓到https请求,每个百度出来的回答又不是那么详细,需要通过几篇回答才能解决过程中的各种问题,所以把自己的安装经 ...

  4. linux集群服务网络状态(netstat),服务端页面(图形字符页面)基本配置

    Linux网络基础配置 yum -y install vim        安装vim 关闭的防火墙服务 iptables -F iptables -X iptables -Z systemctl s ...

  5. python机器学习经典实例PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:caji 在如今这个处处以数据驱动的世界中,机器学习正变得越来越大众化.它已经被广泛地应用于不同领域,如搜索引擎.机器人.无人驾驶汽车等.Python机器学习经典实例首先通过实用的案例 ...

  6. 利用Python实现定时发送邮件,实现一款营销工具

    说起自动化绝对算是茶余饭后最有显B格的谈资,毕竟解放双手是从老祖先那里就流传下来的基因,都2020了,你每天上班还要登录各个邮箱账号查收邮件?快来解锁本章内容 整体思路 很多人学习python,不知道 ...

  7. Linux学习笔记之如何把ubuntu下的c文件共享到windows下文件夹

    1.首先可在桌面新建文件夹,或者自己任意路径文件夹都可以, 2.在Linux下点击虚拟机 点击设置 点击选项,选择共享文件夹,点击总是启用,然后添加文件夹,添加你windows下想保存的文件夹   可 ...

  8. 制作的excel表格如何放到微信公众号文章中?

    制作的excel表格如何放到微信公众号文章中? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件 ...

  9. pytorch载入模型的参数总是变化,比如说某个conv(3,3)kernel的几个参数总是变化:

  10. NLP Github

    作者:cstghitpku链接:https://zhuanlan.zhihu.com/p/51279338来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1.分词 Wo ...