C#RESTful API 访问辅助类

IT技术2年前 (2022)发布 投稿用户
0

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);
}
}

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章