在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
既然是手脚架,那么肯定得明白,手脚架是有限资源的一个整合,我们尽可能完善它,并保留可扩展性才是最终目的,尽可能减少硬编码,让业务不满足的情况下,可以自行修改
我们把解决方案取名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
|
请发表评论