C#写WebAPI时的Response Body模型定义

首先我们定义错误类型及其描述,如:

    /// <summary>
    /// 返回结果中的错误代码。
    /// 0表示OK,其他均表示错误。
    /// 错误码区码代码段,如:
    /// 1-9表示一大类不同小类的错误,
    /// 11-19表示一大类不同小类的错误,
    /// 21-29表示一大类不同小类的错误……
    /// 依此类推。
    /// 通用错误(不细分类型)码为较大的数,如999
    /// </summary>
    public enum ErrorCode
    {
        /// <summary>
        /// 未知错误
        /// </summary>
        [Description("未知错误")]
        Unknown = -1,
        /// <summary>
        /// 成功
        /// </summary>
        [Description("成功")]
        OK = 0,
        /// <summary>
        /// 非法参数
        /// </summary>
        [Description("非法参数")]
        InvalidParam = 1,
        /// <summary>
        /// 常见错误
        /// </summary>
        [Description("常见错误")]
        CommonError = 999
    }

然后,我们定义一个基类,实现当定义错误类型Code后,如未指定错误描述信息,则自动获取Code对应的Description作为描述信息,并且,返回结果中不包含数据时,data项为null不可忽略,如下:

    /// <summary>
    /// 返回结果Body部分
    /// </summary>
    public class ResponseBody
    {
        /// <summary>
        /// 状态码
        /// </summary>
        [JsonProperty("code")]
        [JsonRequired]
        [DefaultValue(ErrorCode.Unknown)]
        public ErrorCode Code { get; set; }

        private string _description = null;
        /// <summary>
        /// 描述信息
        /// </summary>
        [JsonProperty("desc")]
        public string Description
        {
            get
            {
                if (string.IsNullOrEmpty(_description) && CheckValue.IsValid(typeof(ErrorCode), Code))
                    _description = EnumTypeHelper.GetEnumDescription(Code);
                return _description;
            }
            set
            {
                _description = value;
            }
        }
        /// <summary>
        /// 数据
        /// </summary>
        [JsonProperty("data", NullValueHandling = NullValueHandling.Include)]
        public object Data { get; set; }
    }

接下来,我们可以定义常见的返回值,如执行成功和执行出错两种情况,让它们分别继承自以上基类:

    /// <summary>
    /// 成功
    /// </summary>
    public sealed class ResponseOk : ResponseBody
    {
        public ResponseOk() { Code = ErrorCode.OK; }
    }

    /// <summary>
    /// 出错
    /// </summary>
    public sealed class ResponseCommonError : ResponseBody
    {
        public ResponseCommonError() { Code = ErrorCode.CommonError; }
    }

那么,我们在调用的时候,可以直接指定Code就可以了,如未添加desc,则自动补齐:

                var ls = PictureManager.Instance.QueryInfo(param).ConvertAll(e => new TaskPictureMetadata(e));
                return Json(new ResponseOk() { Data = (0 < ls.Count) ? ls : null });

结果示例:

{
    "code": 0,
    "desc": "成功",
    "data": [
        {
            "tid2": "354412A789AD436AAD2BD91B673E2DCE",
            "gid": "93519CAB-07DE-441F-BA9B-2847504437AE",
            "restype": 0,
            "resgid": "CCC123",
            "source": null
        },
        {
            "tid2": "354412A789AD436AAD2BD91B673E2DCE",
            "gid": "{096C707D-DB11-46BD-A3AA-026CD2FF36C3}",
            "restype": 0,
            "resgid": "CCC456",
            "source": null
        }
    ]
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值