插件化编程之WebAPI统一返回模型

WebApi返回数据我们一般包裹在一个公共的模型下面的,而不是直接返回最终数据,在返回参数中,显示出当前请求的时间戳,是否请求成功,如果错误那么错误的消息是什么,状态码(根据业务定义的值)等等 。我们常规的返回值常需要如下字段,为此我们可以先定义IResultDto 接口
/// <summary>/// 结果模型/// </summary>public interface IResultDto{/// <summary>/// 成功/// </summary>bool Successful { get; set; }/// <summary>/// 返回标识码/// </summary>int Code { get; set; }/// <summary>/// 操作码(用于幂等性验证,每次请求都会返回一个新的,以便用户下次更新使用)/// </summary>string OpCode { get; set; }/// <summary>/// 消息/// </summary>string Msg { get; set; }/// <summary>/// 常规数据/// </summary>dynamic Data { get; set; }}/// <summary>/// 结果模型/// </summary>public interface IResultDto{/// <summary>/// 成功/// </summary>bool Successful { get; set; }/// <summary>/// 返回标识码/// </summary>int Code { get; set; }/// <summary>/// 操作码(用于幂等性验证,每次请求都会返回一个新的,以便用户下次更新使用)/// </summary>string OpCode { get; set; }/// <summary>/// 消息/// </summary>string Msg { get; set; }/// <summary>/// 常规数据/// </summary>dynamic Data { get; set; }}对应的还接口的实现如下,为了更好的独立性,在这里实现了成功和失败赋值方法 。
/// <summary>/// 返回模型/// </summary>public class ResultDto : IResultDto{/// <summary>/// 返回标识码/// </summary>public int Code { get; set; }/// <summary>/// 成功/// </summary>[JsonIgnore]public bool Successful { get; set; }/// <summary>/// 消息/// </summary>public string Msg { get; set; }/// <summary>/// 操作码(用于幂等性验证,每次请求都会返回一个新的,以便用户下次更新使用)/// </summary>public string OpCode { get; set; }/// <summary>/// 常规数据/// </summary>public dynamic Data { get; set; }/// <summary>/// 成功/// </summary>/// <returns></returns>public ResultDto Success(string msg = "success"){this.Code = (int)EnumCode.Succeed;this.Successful = true;this.Msg = msg;return this;}/// <summary>/// 成功/// </summary>/// <param name="data"></param>/// <param name="msg"></param>/// <returns></returns>public ResultDto Success(dynamic data = https://www.huyubaike.com/biancheng/default, string msg ="success"){this.Code = (int)EnumCode.Succeed;this.Successful = true;this.Data = https://www.huyubaike.com/biancheng/data;this.Msg = msg;return this;}///

/// 成功/// /// /// 失败/// /// /// <summary>/// 返回模型/// </summary>public class ResultDto : IResultDto{/// <summary>/// 返回标识码/// </summary>public int Code { get; set; }/// <summary>/// 成功/// </summary>[JsonIgnore]public bool Successful { get; set; }/// <summary>/// 消息/// </summary>public string Msg { get; set; }/// <summary>/// 操作码(用于幂等性验证,每次请求都会返回一个新的,以便用户下次更新使用)/// </summary>public string OpCode { get; set; }/// <summary>/// 常规数据/// </summary>public dynamic Data { get; set; }/// <summary>/// 成功/// </summary>/// <returns></returns>public ResultDto Success(string msg = "success"){this.Code = (int)EnumCode.Succeed;this.Successful = true;this.Msg = msg;return this;}/// <summary>/// 成功/// </summary>/// <param name="data"></param>/// <param name="msg"></param>/// <returns></returns>public ResultDto Success(dynamic data = https://www.huyubaike.com/biancheng/default, string msg ="success"){this.Code = (int)EnumCode.Succeed;this.Successful = true;this.Data = https://www.huyubaike.com/biancheng/data;this.Msg = msg;return this;}///

经验总结扩展阅读