发布时间:2020-02-18 21:06:33来源:本站阅读(897)
最近用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);
}
}
}
关键字: core
上一篇: core 中使用 swagger
下一篇: jexus配置运行core
1523
779
685
1653
1288
944
1629
1733
897
1840
9913
6137
5683
5254
4722
4436
3605
3487
3486
3394