zoukankan      html  css  js  c++  java
  • 从零写一个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

  • 相关阅读:
    复制excel表中的数据
    微信H5页面分享获取JS-SDK
    JS中let、var、const的区别
    JS-对象常用方法整理
    JS-数组常用方法整理
    掌握一门新技术/语言需要哪些步骤?
    浅谈JavaScript中的内存管理
    js对象模型2
    ts中的装饰器
    ts中的泛型
  • 原文地址:https://www.cnblogs.com/NCoreCoder/p/10346223.html
Copyright © 2011-2022 走看看