从零写一个Asp.net core手脚架 (异常处理)
既然是手脚架,那么肯定得明白,手脚架是有限资源的一个整合,我们尽可能完善它,并保留可扩展性才是最终目的,尽可能减少硬编码,让业务不满足的情况下,可以自行修改
我们把解决方案取名Asp.netCoreTemplate,项目取名Core.Template
Core.Template顾名思义,核心的模板,并不是我们最终生成项目的手脚架
手脚架叫Core.Template.CLI
构建处理异常的中间件
我们创建一个Middleware文件夹,单击右键新建项->中间件类
取名ExceptionMiddleware
这个中间件要在启用Mvc(UseMvc)之前,处理异常,统一返回
我们定义一个处理业务以及非业务异常的接口
public interface IExceptionHandler
{
Task ExecuteAsync(HttpContext context,Exception exception);
}
我们写一个默认实现
internal class ExceptionHandler : IExceptionHandler
{
public async Task ExecuteAsync(HttpContext context, Exception exception)
{
await context.Response.WriteAsync("Exception Hello");
}
}
触发异常之后返回"Hello"
我们在项目默认的ValuesController里增加一个Action叫Exception
直接抛出异常,会不会正确收到“Exception Hello”
运行一下
大功告成~~~
扩展
你以为撒花了啊?我们是写脚手架,尽可能一键生成代码的,至少要减少很多不必要的代码吧?
你写一堆if else算哪门子的脚手架~
再扩展一下
[AttributeUsage(AttributeTargets.Method)]
public abstract class ExceptionAttribute : Attribute
{
public Type ExceptionType { get; } public ExceptionAttribute(Type type)
{
if (!type.IsSubclassOf(typeof(Exception)))
throw new Exception($"Type Nof Inherit From Exceptoion"); ExceptionType = type;
}
}
打上这个特性的方法
返回Task 第一个参数HttpContext,第二个参数Exception,并且不等于“ExecuteAsync” 不能死循环递归吧
我们增加一个方法
[ExceptionMethos(typeof(CoreException))]
public async Task CoreAsync(HttpContext context, Exception exception)
{
await context.Response.WriteAsync("Core Exception Hello");
}
增加一个Action,抛出异常类型CoreException测试一下
我们之后就这样添加就行了,代码里面不用写一堆if else
后记
我个人理解的脚手架,就要极可能代码简洁明了,不要有过多代码去影响阅读质量,留足够多的扩展空间
这篇文档省略了很多实际性的代码,这部分,我作为github项目的形式提供,希望不会给太多设计细节在文章里面
链接附上
https://github.com/htrlq/AspNetCoreTemplate
最新文章
- 关于打印机能PING通但是无法打开\\地址的问题
- ios回调函数的标准实现:protocol+delegate
- WPF,Silverlight与XAML读书笔记第四十六 - 外观效果之三皮肤与主题
- [Flash 3D] 又是一个难题解决了。(Flash3D在android中运行)
- C#实体图片下载与批量下载(自动保存功能)
- AJAX案例四:省市联动
- [R]R的工作流
- 20150625_Andriod_02_ListView2_多条目显示_选中
- Codeforces Round #129 (Div. 2)
- HDP2.4安装(五):集群及组件安装
- Java Cookie和Session(转载)
- HDU 产生冠军 2094
- 手动编译Spring4.2源码,以及把源码导入myEclipse中
- 《Effective C++》Item2:尽量以const,enum,inline替换#define
- freemarker中的substring取子串(十四)
- Http的定义及其基本概念介绍
- Android冷启动优化
- webpack proxyTable 跨域
- JAVA 注解,泛型,反射获取泛型,并实例化
- Python3基础 input 输入浮点数,整数,字符串
热门文章
- Hyperledger Fabric 2.1 搭建教程
- Django之模型层第二篇:多表操作
- python数据处理(二)之处理Excel文件
- 数据可视化基础专题(四):Pandas基础(三) mysql导入与导出
- 数据可视化之 图表篇(一)Power BI可视化,几张图表认识疫情现状
- L-BFGS算法详解(逻辑回归的默认优化算法)
- [开源硬件DIY] 自制一款精致炫酷的蓝牙土壤温湿度传感器,用于做盆栽呵护类产品(API开放,开发者可自行DIY微信小程序\安卓IOS应用)
- linq介绍及工作中应用两例——左联与内联,linq循环方法
- Mybatis——@MapperScan原理
- vue中使用触摸事件,上滑,下滑,等