既然是手脚架,那么肯定得明白,手脚架是有限资源的一个整合,我们尽可能完善它,并保留可扩展性才是最终目的,尽可能减少硬编码,让业务不满足的情况下,可以自行修改

我们把解决方案取名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

转载于:https://www.cnblogs.com/NCoreCoder/p/10346223.html

从零写一个Asp.net core手脚架 (异常处理)相关推荐

  1. Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群

    Kubernetes简介 Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的 ...

  2. 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!

    从零写一个具有IOC-AOP-MVC功能的框架-学习笔记 专栏往期文章链接: IOC功能相关章节: 从零写一个具有IOC-AOP-MVC功能的框架-学习笔记-01.项目初始化 从零写一个具有IOC-A ...

  3. 从零写一个编译器(完结):总结和系列索引

    前言 这个系列算作我自己的学习笔记,到现在已经有十三篇了,加上这篇一共十四篇.一步一步的从词法分析到语法分析.语义分析,再到代码生成,准备在这一篇做一个总结收尾和一个这个系列以前文章的索引. (另外, ...

  4. 如何一秒钟从头构建一个 ASP.NET Core 中间件

    前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...

  5. 第一百零一期:如何处理ASP .NET Core中的cookie?

    本文介绍了ASP.NET Core Web应用程序中利用cookie存储和检索针对特定用户的信息. 作者:布加迪编译 [51CTO.com快译]cookie是通常用于存储有关用户信息的一条数据,存储在 ...

  6. asp.net core 自定义异常处理中间件

    Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导 ...

  7. Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例

    在<Kubernetes中分布式存储Rook-Ceph部署快速演练>文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernete ...

  8. 利用记事本创建一个ASP.NET Core RC2 MVC应用

    步骤一.安装最新的.NET Core SDK 我们可以根据自身的操作系统环境从https://github.com/dotnet/cli上下载.NET Core最新的SDK,这个SDK包含.NET C ...

  9. 写一个自己的前端手脚架(1)

    确认需求 我是react技术栈,所以手脚架生成的工程里必然是有react全家桶的.其余的一些webpack配置我决定参考一下开源的手脚架工具,这个配置应该都是大同小异.借此机会顺便梳理一下. base ...

最新文章

  1. 【Hadoop Summit Tokyo 2016】Rakuten是如何解决由于大规模多租户Hadoop集群造成的迷之问题的...
  2. php导出页面word,php导出生成word的方法_PHP
  3. android 自定义圆形图片素材,Android 使用shape制作drawable素材
  4. 奇妙的 CSS shapes(CSS图形)
  5. 深入理解操作系统原理之Windows进程管理
  6. origin 一键导出文件夹中所有图形
  7. 网络编程(三):网络中的端口号
  8. matlab 求副瓣电平,一种阵列天线一维方向图的副瓣电平计算方法与流程
  9. 如何在 R 中的直方图上叠加正态曲线(2 个示例)
  10. 在线免费服务器,免费web服务器Tomcat
  11. 微积分-求导必背公式
  12. 阿里巴巴java开发手册一方库、二方库、三方库都是什么东东
  13. [Python]将MP3和PDF按名字分类归档到各自文件夹
  14. 利用Requests和BeautifulSoup爬取网易云音乐热歌榜
  15. chrome 插件个人使用推介
  16. 熊猫直播P2P分享率优化(上):IP组网
  17. 如何做CEdit中的Undo,Redo(和word类似的输入法输入一次为一个回退块)
  18. H3C静态路由与BFD联动(单跳检测)配置案例
  19. Prege(图计算框架)l: A System for Large-Scale Graph Processing(译)
  20. winpe修复计算机无法启动,用winpe来修复无法进入系统的问题

热门文章

  1. Java抽象类与接口
  2. python之类的构造方法
  3. 生日快乐!为网易云商七周年Cheers!
  4. 项目中选择Vite还是Webpack
  5. java tostring 父类_Java之toString方法
  6. 微信小程序-设置倍数播放按钮
  7. 【棋盘问题】-马走日
  8. 利用Matlab解方程
  9. EclipsePHP Studio使用设置笔记
  10. 流媒体学习之路(WebRTC)——GCC分析(1)