对接API模型创建

请求模型的创建

提取公共方法

把URL放在model里可以方便后期维护.

 [JsonObject(MemberSerialization.OptOut)]//JsonObject序列化时忽略某些列
 public abstract class BaseRequest
    {
    
    
     [JsonIgnore]//利用特性忽略序列化该字段
        public  string Host {
    
     get; set; }
        [JsonIgnore]
        public  string dev_key {
    
     get; set; }
        
      protected abstract string Url {
    
     get; }
       /// <summary>
        /// 获取Url
        /// </summary>
        /// <returns></returns>
        public  string Get_ApiUrl()
        {
    
    
            if(string.IsNullOrWhiteSpace(Host))
            {
    
    
                throw new ArgumentNullException(paramName: nameof(this.Host), message: "未给Host赋值");
            }
            if(string.IsNullOrWhiteSpace(dev_key))
            {
    
    
                throw new ArgumentNullException(paramName: nameof(this.dev_key), message: "未给dev_key赋值");
            }
            if(!string.IsNullOrWhiteSpace(Url))
            {
    
    
            	//这里是验签方法
                string datestr = JsonConvert.SerializeObject(this);
                string TobeEncrypted = datestr + "&" + this.dev_id + "&" + this.dev_key;
              string MD5str=  System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(TobeEncrypted, "MD5").ToLower();
                byte[] bytes = Encoding.UTF8.GetBytes(MD5str);
                string sign = Convert.ToBase64String(bytes);
                return Host + this.Url + "?sign=" + sign;
            }
            else
            {
    
    
                throw new  ArgumentNullException(paramName: nameof(this.Url), message: "模型类没有定义请求链接");
            }

        }
    }

定义模块请求model

这里继承的父类就是上面我们提取出公共属性的model.这里重写了父类的URL
这种方式只需要在父类写一次验签方法就可以了,增加代码的复用率同时实现高内聚方便后期维护.

 public  class AddOrderGratuityfeeReq : BaseRequest
 {
    
    
 //子类自己的属性
   public string order_id {
    
     get; set; }
 //重写父类URL属性
  protected override string Url {
    
     get {
    
     return "/open/api/external/addordergratuityfee"; } }
 }

响应模型的创建

提取公共方法

这里也是提取了公共方法减少代码冗余

  /// <summary>
    /// 返回实体
    /// </summary>
    /// <typeparam name="T"></typeparam>
   public class BaseResponse<T>
    {
    
    
        /// <summary>
        /// 错误代码
        /// </summary>
        public int error_code {
    
     get; set; }
        /// <summary>
        /// 错误描述
        /// </summary>
        public string error_msg {
    
     get; set; }
        /// <summary>
        /// 详细报错信息(报错的时候非空)
        /// </summary>
        public object error_data {
    
     get; set; }
        /// <summary>
        /// 返回数据
        /// </summary>
        public T result {
    
     get; set; }
    }

定义响应model

 public class CreateOrdeRes:BaseResponse<CreateOrdeRes>
    {
    
    
    //这里如果有其他单独属于这一个模块的属性可以写在这里
	}
	

调用方法

  CreateOrderReq ordeReq = new CreateOrderReq();//请求对象
string req = HttpHelper.Post(ordeReq.Get_ApiUrl(), JsonConvert.SerializeObject(ordeReq));
//将返回数据序列化为响应对象
 CreateOrdeRes ordeRes = JsonConvert.DeserializeObject<CreateOrdeRes>(req);

高效率代码在于平时开发中的总结,开发过程中要想到怎样才能方便后期维护,和怎么写才能提高代码效率和复用率避免代码冗余.

猜你喜欢

转载自blog.csdn.net/qq_42455262/article/details/128479039