AspNet Core Api Restful +Swagger 实现微服务之旅(四)

本文介绍了一种统一API响应格式及异常处理的方法,包括创建WebApiException类用于捕获并自定义异常返回信息,使用WebApiResultMiddleware类对返回结果进行格式封装,以及在Startup.cs中注册服务实现。此外,还探讨了接口参数的必填与非必填声明。

接着上一篇的内容

      (2)  程序错误时  返回数据格式封装

      (3)  返回结果包装

      (4)  对外开放的接口 参数必填与非必填的声明

   (2)  程序错误时  返回数据格式封装/(3)返回结果包装

         2.1创建捕获异常类当有异常发生时自定义返回信息 WebApiException

复制代码

 public class WebApiException : IExceptionFilter
    {
        /// <summary>
        /// 监控程序错误
        /// </summary>
        /// <param name="context"></param>
        public void OnException(ExceptionContext context)
        {
            NewMethod(context);
        }
        private static void NewMethod(ExceptionContext context)
        {
            if (context.Exception is Exception)
            {
                var objectResult = context.Exception as Exception;
                if (objectResult.Message != null)
                {
                    context.Result = new ObjectResult(new { Success = false,  msg = "你的程序有误!" });
                    //写入日志
                }
            }
        }

    }

复制代码

             2.2创建 结果封装类  WebApiResultMiddleware  返回结果封装成统一的样式

复制代码

   public class WebApiResultMiddleware : ActionFilterAttribute
    {
        /// <summary>
        ///  对返回的结果进行统一的 格式
        /// </summary>
        /// <param name="context"></param>
        public override void OnResultExecuting(ResultExecutingContext context)
        {
            //根据实际需求进行具体实现
            if (context.Result is ObjectResult)
            {
                var objectResult = context.Result as ObjectResult;
                if (objectResult.Value == null)
                {
                    context.Result = new ObjectResult(new {   Success=false, code = 404, msg = "未找到资源", data ="null" }); 
                }
                else
                {
                    context.Result = new ObjectResult(new { Success = true ,code = 200, msg = "成功!", Data = objectResult.Value }); 
                }
            }
          
        }
    }

复制代码

            2.3 在startup.cs 启动容器中注册 服务

复制代码

 services.AddMvc(options =>
            {
                //方法返回结果统一化
                options.Filters.Add(typeof(WebApiResultMiddleware));
                //程序错误返回结果统一化
                options.Filters.Add(typeof(WebApiException));
                //身份验证不通过是返回结果统一化
                options.Filters.Add(typeof(WebApiAuthorizationFilter));
                options.RespectBrowserAcceptHeader = true;
            });

复制代码

           返回结果就不在演示了,通过这三个类 我们能做很多的事情,比如写一个录入日志的方法就可以解决整个框架的写日志问题。

(4)  对外开放的接口 参数必填与非必填的声明

 

生成的路径样式

对控制器的包装  支持传输参数的的声明

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值