请求模型的创建
提取公共方法
把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);
高效率代码在于平时开发中的总结,开发过程中要想到怎样才能方便后期维护,和怎么写才能提高代码效率和复用率避免代码冗余.