美文网首页工作生活
关于使用HttpUtility.ParseQueryString

关于使用HttpUtility.ParseQueryString

作者: Memoyu | 来源:发表于2019-07-05 00:16 被阅读0次

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

    概述

      在工作项目中,需要各种的通过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"));
    

    相关文章

      网友评论

        本文标题:关于使用HttpUtility.ParseQueryString

        本文链接:https://www.haomeiwen.com/subject/gczdhctx.html