中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C# 如何解析獲取Url參數值

發布時間:2020-10-26 05:50:04 來源:腳本之家 閱讀:434 作者:傅小灰 欄目:開發技術

今天遇到一個需求,需要處理通過接口傳過來的一個參數,參數內容為一個拼接好的Url地址,且該地址還會攜帶了一些額外的參數,包括但不限于數字,字符串,json串。樣例如下:

http://www.cplemom.com/?url=https://www.jb51.net/={"id":12,"name":"今天天氣不錯"}

現在的問題就是,我需要將url參數中的data值的json中的id修改為url參數中id的值,然后再拼接成完整的url去獲取數據。簡單來說就是將url進行如下改變,現在問題的重點就在于如何根據url獲取對應的參數值了。

//處理前
https://www.jb51.net/={"id":12,"name":"今天天氣不錯"}

//處理后
https://www.jb51.net/={"id":15,"name":"今天天氣不錯"}

Url編碼

這里插一句,在將url作為參數進行請求的時候,需要注意一些特殊字符(比如 ? "" / 等)對請求的影響,特別是發送Get請求的時候。可以在發送請求前,先對url進行編碼處理。

encodeURIComponent(url) //js
HttpUtility.UrlEncode(url) //C#
url.QueryEscape(url) //Go

獲取Url參數

仔細思考了下,解析url獲取參數的也無非通過分割關鍵字符來實現。區別就是分割字符的方式是通過正則匹配或者遍歷字符罷了。下面就介紹框架帶的方法,然后通過總結一些規律,最后自己實現一個方法。

我知道肯定有很多朋友經常使用HttpUtility類中的UrlEncode/UrlDecode方法,其實該類還有一個ParseQueryString方法,用來解析url參數。該方法需要傳入url參數部分字符串,然后返回一個NameValueCollection對象(以key/value的形式記錄了所有參數)。

string url = "https://www.jb51.net/={'id':12,'name':'今天天氣不錯'}";
var uri = new Uri(url);

var collection= HttpUtility.ParseQueryString(uri.Query);//默認采用UTF-8編碼,當然也可以傳入特定編碼進行解析
//var collection= HttpUtility.ParseQueryString(uri.Query,Encoding.ASCII);

Console.WriteLine(collection["data"]);//輸出結果: {'id':12,'name':'今天天氣不錯'}

該方法有幾個要注意的點

  1. uri.Query是?開頭的,但是在轉為鍵值對以后被自動過濾掉了,且只會過濾一個?字符
  2. 參數內容會自動使用UTF-8解碼
  3. 對于傳遞的數組參數(?ids=1&ids=2),會通過,
  4. 在參數字符中通過&劃分后,只會把第一個=前的字符串作為key

基于上述一些要求就可以自己寫一個解析參數的方式了。

public static Dictionary<string, string> ParseQueryString(string url)
{
	if (string.IsNullOrWhiteSpace(url))
	{
		throw new ArgumentNullException("url");
	}
	var uri = new Uri(url);
	if (string.IsNullOrWhiteSpace(uri.Query))
	{
		return new Dictionary<string, string>();
	}
     //1.去除第一個前導?字符
	var dic = uri.Query.Substring(1)
      //2.通過&劃分各個參數
			.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries)
      //3.通過=劃分參數key和value,且保證只分割第一個=字符
			.Select(param => param.Split(new char[] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries))
      //4.通過相同的參數key進行分組
			.GroupBy(part => part[0], part => part.Length > 1 ? part[1] : string.Empty)
      //5.將相同key的value以,拼接
			.ToDictionary(group => group.Key, group => string.Join(",", group));

	return dic;
}

總結

總體來說這只是一個小小的功能點,往往框架本身就幫我們封裝好了解析url獲取參數的方法,但是自己去實現的時候,可能就會有這樣那樣的情況沒有考慮到。最后如果有遇到相似需求的朋友,我建議還是用HttpUtility.ParseQueryString()吧~~~

以上就是C# 如何解析獲取Url參數值的詳細內容,更多關于c# 解析獲取Url參數值的資料請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

苏尼特右旗| 怀宁县| 巴彦淖尔市| 嘉荫县| 前郭尔| 阜新市| 朝阳县| 吴堡县| 南溪县| 随州市| 夏津县| 通榆县| 顺平县| 建宁县| 肃南| 崇礼县| 澄迈县| 桓台县| 朔州市| 手机| 临泽县| 华坪县| 临漳县| 涡阳县| 仁化县| 西吉县| 万安县| 宁南县| 阜平县| 五峰| 金川县| 永善县| 娄底市| 雷州市| 穆棱市| 曲沃县| 长沙市| 浑源县| 拜城县| 嵊泗县| 通渭县|