志在指尖
用双手敲打未来

C#RESTful API 访问辅助类

RESTful作风的API,在HTTP协议上运用的是规范HTTP办法,GET、PUT、POST和DELETE等。
常用理论
(1)API返回结果通常为JSON方式,恳求的头部属性Accept通常设置为application/json
(2)恳求的Body数据局部运用JSON方式
(3)鉴权信息运用JWT等方式的受权码方式,放在恳求头部属性中传输,属性称号自定义,如auth,token等等C#
辅助类设计
(1)属性定义
定义属性:TokenHeaderName
上述理论描绘中,自定义局部为鉴权信息在头部属性中的称号,定义该属性表示这个称号。
定义属性:DefaultToken
思索到鉴权信息在某些场景下可初始为一个固定值,定义该属性在默许状况下运用。
详细定义如下:
//鉴权token的恳求头属性称号
publicStringTokenHeaderName{get;set;}
//默许的鉴权token信息
publicStringDefaultToken{get;set;}
(2)办法定义
办法定义跟规范的HTTP办法分歧,这里定义常用的Get、Put、Post、Delete办法。
再抽取其中会反复的局部构成一些私有办法来复用,再重载一些办法使得能够应用默许参数值。
(2.1)结构办法
结构时能够指定鉴权头部属性名和token,也能够不指定。
publicRestApiVisitHelper()
{
}
//结构时设置鉴权token的恳求头属性称号
publicRestApiVisitHelper(StringtokenHeaderName)
{
TokenHeaderName=tokenHeaderName;
}
//结构时设置鉴权token的恳求头属性称号,以及默许的token值
publicRestApiVisitHelper(StringtokenHeaderName,StringdefaultToken){
TokenHeaderName=tokenHeaderName;
DefaultToken=defaultToken;
}
(2.2)访问所需辅助办法
(2.2.1)创立WebClient,设置好相关属性,包括鉴权头部信息
//创立WebClient并设置好token信息
privateWebClientCreateWebClient(Stringtoken)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback=((sender,certificate,chain,sslPolicyErrors)=>true);
System.Net.WebClientwebClientObj=newSystem.Net.WebClient();
webClientObj.Headers.Add(“Accept”,”application/json”);
if(!String.IsNullOrEmpty(TokenHeaderName)&&!String.IsNullOrEmpty(token))
{
webClientObj.Headers.Add(TokenHeaderName,token);
}
webClientObj.Encoding=Encoding.UTF8;
returnwebClientObj;
}
(2.2.2)将查询参数格式化拼接成最终url
//将查询参数格式化拼接到url上构成最终的访问地址
privateStringFormatUrl(StringapiUrl,HashtablequeryParams)
{
StringqueryString=””;
foreach(varkinqueryParams.Keys)
{
if(!String.IsNullOrEmpty(queryString))
{
queryString+=”&”;
}
queryString+=String.Format(“{0}={1}”,k,queryParams[k]);
}
if(!String.IsNullOrEmpty(queryString))
{
apiUrl+=”?”+queryString;
}
returnapiUrl;
}
(2.2.3)异常统一处置
呈现恳求异常时,能够统一停止处置,详细返回结果可自行定义。
//异常时返回的信息:应该依据实践需求停止返回
privateStringWhenError(Exceptione)
{
JObjectresult=newJObject();
result[“err_code”]=-1;
if(eisWebException)
{
varwe=(WebException)e;
if(we.Response!=null)//假如有输出则依然返回实践输出
{
returnnewStreamReader(we.Response.GetResponseStream()).ReadToEnd();
}
else
{
result[“err_msg”]=we.Message;
}
}
else
{
result[“err_msg”]=e.Message;
}
returnresult.ToString(Newtonsoft.Json.Formatting.None);
}
(2.3)公开办法详细完成
有了以上辅助办法,完成代码会变得简约,且各个办法代码构造相似。以下以Post办法(包括重载)为例展现根本完成。
///
///PostApi返回结果文本,运用默许的鉴权token
///
///
///
///
///
publicStringPost(stringapiUrl,HashtablequeryParams,JObjectbody)
{
returnPost(apiUrl,queryParams,body,DefaultToken);
}
///
///PostApi返回结果文本
///
///
///
///
///
///
publicStringPost(stringapiUrl,HashtablequeryParams,JObjectbody,Stringtoken)
{
System.Net.WebClientwebClientObj=CreateWebClient(token);
apiUrl=FormatUrl(apiUrl,queryParams);
try
{
Stringresult=webClientObj.UploadString(apiUrl,”POST”,body.ToString(Newtonsoft.Json.Formatting.None));
returnresult;
}
catch(Exceptionce)
{
returnWhenError(ce);
}
}

未经允许不得转载:IT技术网站 » C#RESTful API 访问辅助类
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载