• core api


    最近用core做了个小项目,在api项目中想便捷的统一返回,便写了个controller基类 

    [Route("api/[controller]/[action]")]
        [ApiController]
        public class MyBaseController : ControllerBase
        {
            private ILogger<MyBaseController> _log;
    
            public MyBaseController(ILogger<MyBaseController> log)
            {
                _log = log;
            }
    
            protected ResponseResult Response(object data = null)
            {
                return new ResponseResult(data);
            }
    
            protected ResponseResult Response(MyException ex)
            {
                return new ResponseResult(ex);
            }
    
            protected ResponseResult Response(Exception ex)
            {
                var controller = ControllerContext.ActionDescriptor.ControllerName;
                var action = ControllerContext.ActionDescriptor.ActionName;
                var str = $"Controller:{controller},Action:{action},信息:";
                _log.LogError(str+ex);
                return new ResponseResult(ex);
            }
        }

    在这个基类里,我对exception记录了日志,大家可根据自己的需要扩展自己想要的功能。业务的controller继承这个就可以了。上面代码中的responseresult 

    public class ResponseResult:ActionResult
        {
            
            public ResponseModel Data { get; set; }
    
            public ResponseResult(dynamic data)
            {
                Data = new ResponseModel{ErrCode = (int)ResponseEnum.Success,Data = data};
            }
    
            public ResponseResult(MyException mex)
            {
                Data=new ResponseModel{ErrCode = (int)ResponseEnum.Msg,ErrMsg = mex.Message};
            }
    
            public ResponseResult(Exception ex)
            {
                Data=new ResponseModel{ErrCode = (int)ResponseEnum.Fail,ErrMsg = ex.Message};
            }
    
            public override void ExecuteResult(ActionContext context)
            {
                HttpResponse response = context.HttpContext.Response;
                response.ContentType = "application/json";
                var result = JsonConvert.SerializeObject(Data);
                response.WriteAsync(result);
            }

    本来responseresult是返回的模型,但由于重写了executeresult ,要序列化返回的结果,为避免序列化自己,所以又加了返回的模型 responsemodel 

    public class ResponseModel
        {
            public int ErrCode { get; set; }
    
            public string ErrMsg { get; set; }
    
            public dynamic Data { get; set; }
        }

    responsemodel中data是真正返回的数据,errcode是结果标识,errmsg是信息提示。小伙伴们可根据自己的需要扩展。

    业务controller中使用如下

    public class OrderController : MyBaseController
        {
            private readonly IOrder _order;
            public OrderController(ILogger<MyBaseController> log, IOrder order) : base(log)
            {
                _order = order;
            }
            /// <summary>
            /// 由ID取订单详情
            /// </summary>
            /// <param name="orderId"></param>
            /// <returns></returns>
            [HttpGet]
            [ProducesResponseType(typeof(Order),200)]
            public ResponseResult GetOrderById(int orderId)
            {
                try
                {
                    var r = _order.GetOrder(orderId);
                    return Response(r);
                }
                catch (MyException e)
                {
                    return Response(e);
                }
                catch (Exception e)
                {
                    return Response(e);
                }
            }
    }
  • 相关阅读:
    单div绘制多元素图
    js笔试题系列之二——数组与对象
    JS设计模式——策略模式
    js笔试题系列之三——函数
    zepto.js中的Touch事件
    java定时任务之Scheduled注解
    汤姆大叔送书,咱也科学抢书
    Asp.net Mvc自定义客户端验证(CheckBox列表的验证)
    摆脱烂项目
    我的ORM发展史
  • 原文地址:https://www.cnblogs.com/jzz228/p/11089469.html
Copyright © 2020-2023  润新知