利用虚拟方法和反射简化Alisoft API的调用(二)
2008-11-21 12:18 午夜瞎想 阅读(293) 评论(1) 编辑 收藏 举报上篇 利用虚拟方法和反射简化Alisoft API的调用 写的时候比较晚,而且第一次在博客园上发博客,忘记贴具体的实现了.
顺便说一下题外话,阿里的工作人员的态度还是非常不错的,我上篇文章提的用户体验问题,马上就收到他们的反馈.值得表扬.毕竟国内大多开放的api 都是为了炒作概念而已.
言归正传 先贴委托的代码
public delegate TData Actions<TData>(string result);
public static TData Result<TData>(ParBase par, Actions<TData> reslutAction)
{
string status = string.Empty;
string result = Signature.Post(Constants.SIP_API_URL, par.ToString(), out status);
if (string.IsNullOrEmpty(status))
{
return default(TData);
}
else if ("9999".Equals(status)) //以下部分还没有优化,昨晚时间已经比较晚了就没想了 ,
{ //需要把这里抽离出来,毕竟alisoft api目前还在不断改进
return reslutAction(result);
//return null;
}
else if ("1004".Equals(status))
{
System.Web.HttpContext.Current.Response.Redirect(result + Constants.SIP_Redirecturl);
return default(TData); ;
}
else
{
//Utils.Debug("itemcats_get: " + parent_cid + " : " + Signature.GetMessage(status));
return default(TData); ;
}
}
ParBase类是参数的基类,由于大部分的api参数都比较多,传参是个烦人的事情,利用我以前写的ASP.NET偷懒大法三 (利用Attribute特性简化多查询条件拼接sql语句的麻烦) 同样的思路来节省代码
具体就不贴代码了,贴个图吧. (问一下,在word里面怎么能让代码可以折叠?)
图(1)
[Par(IsNeed=true)] 属性是为了表示参数是否必须.只要是为了开发中提醒我参数是否赋值
重写了ToString方法 来实现传给api的参数+sip_sign 参数
希望有更好的方法,来让我们偷懒,有好的思路记得告诉我.俺抛砖引玉啦 O(∩_∩)O