zoukankan      html  css  js  c++  java
  • AspNet Core Api Restful +Swagger 实现微服务之旅(四)

    这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到时候把心得写出来相互学习。

    接着上一篇的内容

          (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 = "你的程序有误!" });
    //写入日志
    }
    }
    }

    }

    复制代码
     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 });
    }
    }

    }
    }

    复制代码
       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;
    });

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

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

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

     

    生成的路径样式

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

    我想先把基础的东西写下来 为以后做准备。

    比如,路由的配置、DI、管道、中间件等,我也是在学习中希望和大家一起相互印证。

  • 相关阅读:
    从1到n中找到任意num个数的和为sum的所有组合
    算法导论5.12
    使用c++技术实现下载网页
    算法导论5.13
    感慨
    算法导论2.37
    [转载]Yahoo!的分布式数据平台PNUTS简介及感悟
    Bigtable 论文笔记
    GFS 论文笔记
    MapReduce论文笔记
  • 原文地址:https://www.cnblogs.com/zxtceq/p/13916862.html
Copyright © 2011-2022 走看看