发布时间:2020-02-18 21:06:33来源:本站阅读(810)
最近用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
981
1533
1776
1930
1500
1428
1723
1825
5996
949
9593
5996
5523
5116
4567
4274
3415
3336
3335
3269