从零写一个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
从零写一个Asp.net core手脚架 (异常处理)的更多相关文章
- 从零写一个Asp.net core手脚架(模型验证)
一个asp.net core项目,一定包含了各种的实体,在RESTful api里面,有很多的参数传递,不建立实体则大量的参数需要自定验证正确性,并且Action上面会写的密密麻麻的参数 在asp.n ...
- 手把手教你从零写一个简单的 VUE--模板篇
教程目录1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 Hello,我又回来了,上一次的文章教会了大家如何书写一个简单 VUE,里面实现了VUE 的数据驱动视图 ...
- Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群
Kubernetes简介 Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的 ...
- 使用Visual Studio Code创建第一个ASP.NET Core应用程序
全文翻译自:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 这篇文章将向你展示如何在Mac上写出你的第一个A ...
- 如何一秒钟从头构建一个 ASP.NET Core 中间件
前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...
- 手把手教你从零写一个简单的 VUE
本系列是一个教程,下面贴下目录~1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 今天给大家带来的是实现一个简单的类似 VUE 一样的前端框架,VUE 框架现在应 ...
- asp.net core 自定义异常处理中间件
asp.net core 自定义异常处理中间件 Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异 ...
- 用VSCode开发一个asp.net core 2.0+angular 5项目(4): Angular5全局错误处理
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...
- 如何远程关闭一个ASP.NET Core应用?
在<历数依赖注入的N种玩法>演示系统自动注册服务的实例中,我们会发现输出的列表包含两个特殊的服务,它们的对应的服务接口分别是IApplicationLifetime和IHostingEnv ...
随机推荐
- linux环境下安装 openOffice4并启动服务
一.背景故事 openOffice是用来做office文档在线预览功能,把office文档转换成pdf交给前端显示. 之前系统开发过程一直没有将springboot服务怼上服务器,所以只安装了wind ...
- Springboot下实现阿里云短信验证功能(含代码)
Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...
- Ubuntu下编译安装postgreSQL 10.5
Ubuntu下编译安装postgreSQL 10.5 ubuntu 16.04 LTS系统postgreSQL 10.5 安装包准备 1.从PostgreSQL官网下载PostgreSQL的安装包 安 ...
- celery 基础教程(一):工作流程,架构以及概念
1.工作流程 celery通过消息进行通信,通常使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的 ...
- 机器学习实战基础(二十一):sklearn中的降维算法PCA和SVD(二) PCA与SVD 之 降维究竟是怎样实现
简述 在降维过程中,我们会减少特征的数量,这意味着删除数据,数据量变少则表示模型可以获取的信息会变少,模型的表现可能会因此受影响.同时,在高维数据中,必然有一些特征是不带有有效的信息的(比如噪音),或 ...
- redis(三):Redis 命令(python)
import redis from redis import StrictRedis redis=StrictRedis(host='localhost',port=6379,db=0,passwor ...
- 收集TCP端口的访问延迟和丢包率
需求: 找一款工具可以对TCP 80端口 收集 访问延迟和丢包率 找到的工具: 1.Hping : http://www.hping.org/ 2.paping : https://docs.azu ...
- Worktile完成新一轮融资,将发力研发管理赛道
Worktile 宣布完成B+轮融资.本轮融资由亿联凯泰基金领投,老股东斯道资本.宽带资本跟投.该轮融资将用于公司产品技术研发及市场拓展. 作为企业服务行业的佼佼者,Worktile 始终以打造世界级 ...
- 如何理解Javascript中的函数(Function)
Function类型 首先得知道,每个函数都是Function类型的实例,所以函数本身是对象. 示例1: function sum (num1, num2){ return sum1 + sum2; ...
- idea 安装 codota 插件
为抄代码而生的插件哇,码农们的知心姐姐!!!