认知尚浅,如有错误,愿闻其详!
概述
在工作项目中,需要各种的通过API去获取数据,通过Get方式获取数据时,则需要拼接对应的各式各样的Url,然后在进行访问。
API链接例子:https://192.168.1.1:80/api/list?Province_Code=2&Province_Name=mmy&Province_Age=23&Province_Sex=男
链接中分为三个部分,
第一部分:https://192.168.1.1:80/----->服务器地址,是固定的
第二部分:api/list----->为指定的数据路径,按需求拼接
第三部分:?Province_Code=2&Province_Name=mmy&Province_Age=23&Province_Sex=男`----->为查询条件
所以,我们需要封装一个关于Url的拼接方法。
代码
在我们这里,我们仅需要拼接后两个部分,也就是动态的部分(路径与参数),而固定部分(服务器地址)则是在请求时拼接。
首先,我们需要写方法,方法需要传入路径string fixedAddress
、参数字典Dictionary<string , string> dic
,然后使用HttpUtility.ParseQueryString()
方法 ,获得一个空的类似字典的参数键值对对象,然后向其中加入传入字典,最后组成目标Url;
string GetUri(string fixedAddress , Dictionary<string , string> dic)
{
var query = HttpUtility.ParseQueryString(string.Empty);
foreach (var item in dic)
{
query[item.Key] = item.Value;
}
var queryString = query.ToString();
var uri = fixedAddress + (string.IsNullOrEmpty(queryString) ? "" : "?") + queryString;
return uri;
}
使用时需要创建查询参数字典,传入方法中。
Dictionary<string, string> myDictionary = new Dictionary<string, string>();
myDictionary.Add("Province_Code" , "2");
myDictionary.Add("Province_Name", "mmy");
myDictionary.Add("Province_Age", "23");
myDictionary.Add("Province_Sex", "男");
GetUri("api/list", myDictionary);
最终,我们得到的Url是这样的:*https://192.168.1.1:80/api/list?Province_Code=2&Province_Name=mmy&Province_Age=23&Province_Sex=%u7537
不难看出,这是已经经过转码的Url,他将中文,或者符号经过转码,转成解析Http所需要的编码格式
问题
正是如上的转码,造成了一些错误:因为我们在设计后端API时,会对原始请求先进行转码,在进行分析处理,而我么你传过去的是已经转码的数据,再进行二次转码,不仅多余,而且最终解析结果背道而驰,相差甚远。所以,我们要去解决他。获得最原始的请求Url。
解决问题
方法也很简答,当时想到的是既然你把Url转码了,我再把它转回来就好了。然后返会结果。
//使用该方法,将中文编码形式的Url转化成简体中文
string result = HttpUtility.UrlDecode(uri, Encoding.GetEncoding("GB2312"));
网友评论