zoukankan      html  css  js  c++  java
  • WebApi 全局异常与局部异常

    全局异常过滤器

    public class ApiExceptionFilter:ExceptionFilterAttribute
        {
            private IHostingEnvironment _env;
            public ApiExceptionFilter(IHostingEnvironment env)
            {
                _env = env;
            }
    
            public override void OnException(ExceptionContext context)
            {
                if (context.ExceptionHandled)
                {
                    return;
                }
    
                var exMsg = context.Exception.Message;
                ApiResp resp = new ApiResp(ApiRespCode.E999999,exMsg);
                // 开发环境显示异常信息
                if(_env.IsDevelopment())
                {
                    resp.Message = exMsg;
                }
                context.Result = new JsonResult(resp);
                context.ExceptionHandled = true;
            }
        }

            在startup添加这个异常过滤器

    services.AddMvc(options=>
    {
        options.MaxModelValidationErrors = 5;
        // 自定义model验证
        options.Filters.Add<VldFilter>();
        // 异常捕获
        options.Filters.Add<ApiExceptionFilter>();
    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            在原来的api中写一个简单的测试方法。响应报文的默认构造函数中的message使用自定义的枚举扩展方法获取枚举的message属性,如果是开发环境,将这个message替换为异常信息,调试会比较方便。

    [HttpGet]
    public void test()
    {
        int a = 0;
        int c = 1 / a;
    }

    局部异常

            当正常请求进来时,有些时候,我们的接口需要一些条件无法满足,这个时候可以手动抛出异常,因为封装了全局响应报文,这样不会影响系统使用。

    public class ApiException:Exception
    {
        public ApiException() { }
    
        public ApiException(string message) : base(message) { }
    
        public ApiException(string message,Exception ex) : base(message, ex) { }
    
        public ApiException(ApiRespCode apiRespCode) : base(ApiEnum.GetMessage(apiRespCode)) { }
    }

            在需要地方就可以这样抛出异常:

    throw new ApiException(ApiRespCode.E999999);
  • 相关阅读:
    51nod-1462: 树据结构
    51nod-1363: 最小公倍数之和
    jar包反编译
    js表格某列多行值相同进行行合并
    JS对象转URL参数
    json数组转字符串 前端与后端交互
    element-ui 表格数据根据某一列值相同进行行合并(包括序号列)并同列相同值进行合计
    ssh框架中联合查询所取结果不在单一实体,sql写法
    ajax异步获取数据后动态向构建表格并添加数据
    关于ajax中async: false的作用
  • 原文地址:https://www.cnblogs.com/fallTakeMan/p/11684367.html
Copyright © 2011-2022 走看看