这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍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 = "你的程序有误!" }); //写入日志 } } } }
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) 对外开放的接口 参数必填与非必填的声明
生成的路径样式
对控制器的包装 支持传输参数的的声明
我想先把基础的东西写下来 为以后做准备。
比如,路由的配置、DI、管道、中间件等,我也是在学习中希望和大家一起相互印证。