关于使用HttpUtility.ParseQueryString拼接Url问题

认知尚浅,如有错误,愿闻其详!

概述

  在工作项目中,需要各种的通过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 dic,然后使用HttpUtility.ParseQueryString()方法 ,获得一个空的类似字典的参数键值对对象,然后向其中加入传入字典,最后组成目标Url;

 string GetUri(string fixedAddress ,  Dictionary 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 myDictionary = new Dictionary();
           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"));

你可能感兴趣的:(关于使用HttpUtility.ParseQueryString拼接Url问题)