亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#Url操作類封裝、仿Node.Js中的Url模塊實例

2020-01-24 00:58:17
字體:
來源:轉載
供稿:網友

在實際開發中,需要用到的數據在url中,因此就需要我們來獲取到url中有用的信息,涉及到查詢、添加、修改、刪除等操作,下面我們就具體來了解一下。

1.簡單實例

目前常用Url操作,查詢、添加、修改、刪除鏈接參數,重構生成鏈接等功能。

 //string url = "http://www.gongjuji.net:8081";//string url = "http://www.gongjuji.net/";//string url = "http://www.gongjuji.net/abc";// string url = "http://www.gongjuji.net/abc/1234.html";string url = "http://www.gongjuji.net/abc/1234.html?name=張三&age=1234#one#two";//string url = "http://www.gongjuji.net/abc/1234.html?name=&age=#one#two";//string url = "/abc/123.html?name=張三&age=1234#one#two";// string url = "https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86&form=%E8%8E%B7%E5%8F%96%E5%85%B3%E6%B3%A8%E8%80%85%E5%88%97%E8%A1%A8%E6%8E%A5%E5%8F%A3%20/user/get";UrlAnalyze _url = new UrlAnalyze(url);JObject obj = JObject.FromObject(_url);Console.WriteLine(obj);//添加或修改參數_url.AddOrUpdateSearch("page", "2");_url.AddOrUpdateSearch("name", "李四");//重新生成鏈接參數Console.WriteLine(_url.GetUrl());Console.WriteLine(_url.GetUrl(true));

2、實例:

識別字符串中的url

//string source = "工具集:http://www.gongjuji.net";string source = @"工具集:  http://www.gongjuji.net  愛漢字:http://hanzi.tianma3798.cn"; List<string> result = UrlAnalyze.GetUrlList(source);foreach (var item in result){  Console.WriteLine(item);}//替換成a標簽string result2 = UrlAnalyze.ReplaceToA(source);Console.WriteLine(result2);</string>

屬性和部分功能模仿了Node.js的url模塊

源代碼定義:

/// <summary>/// Url地址的格式化和反格式化/// </summary>public class UrlAnalyze{  /// <summary>  /// 協議名稱  /// </summary>  public string Protocol { get; set; }  /// <summary>  /// 是否以反斜杠結尾  /// </summary>  public bool Slashes { get; set; }  /// <summary>  /// 驗證信息,暫時不使用  /// </summary>  public string Auth { get; set; }  /// <summary>  /// 全小寫主機部分,包括端口  /// </summary>  public string Host  {    get    {      if (this.Port == null)        return this.HostName;      return string.Format("{0}:{1}", this.HostName, this.Port);    }  }  /// <summary>  /// 端口,為空時http默認是80  /// </summary>  public int? Port { get; set; }  /// <summary>  /// 小寫主機部分  /// </summary>  public string HostName { get; set; }  /// <summary>  /// 頁面錨點參數部分 #one#two  /// </summary>  public string Hash { get; set; }  /// <summary>  /// 鏈接查詢參數部分(帶問號) ?one=1&two=2  /// </summary>  public string Search { get; set; }  /// <summary>  /// 路徑部分  /// </summary>  public string PathName { get; set; }  /// <summary>  /// 路徑+參數部分(沒有錨點)  /// </summary>  public string Path  {    get    {      if (string.IsNullOrEmpty(this.Search))        return this.PathName;      return PathName + Search;    }  }  /// <summary>  /// 轉碼后的原鏈接  /// </summary>  public string Href { get; set; }   /// <summary>  /// 參數的key=value 列表  /// </summary>  private Dictionary<string, string=""> _SearchList = null;  #region 初始化處理  /// <summary>  /// 空初始化  /// </summary>  public UrlAnalyze() { _SearchList = new Dictionary<string, string="">(); }  /// <summary>  /// 初始化處理  /// </summary>  ///<param name="url">指定相對或絕對鏈接  public UrlAnalyze(string url)  {    //1.轉碼操作    this.Href = HttpUtility.UrlDecode(url);    InitParse(this.Href);    //是否反斜杠結尾    if (!string.IsNullOrEmpty(PathName))      this.Slashes = this.PathName.EndsWith("/");    //初始化參數列表    _SearchList = GetSearchList();  }  /// <summary>  /// 將字符串格式化成對象時初始化處理  /// </summary>  private void InitParse(string url)  {    //判斷是否是指定協議的絕對路徑    if (url.Contains("://"))    {      // Regex reg = new Regex(@"(/w+):////([^/:]+)(:/d*)?([^ ]*)");      Regex reg = new Regex(@"(/w+):////([^/:]+)(:/d*)?(.*)");      Match match = reg.Match(url);      //協議名稱      this.Protocol = match.Result("$1");      //主機      this.HostName = match.Result("$2");      //端口      string port = match.Result("$3");      if (string.IsNullOrEmpty(port) == false)      {        port = port.Replace(":", "");        this.Port = Convert.ToInt32(port);      }      //路徑和查詢參數      string path = match.Result("$4");      if (string.IsNullOrEmpty(path) == false)        InitPath(path);    }    else    {      InitPath(url);    }  }  /// <summary>  /// 字符串url格式化時,路徑和參數的初始化處理  /// </summary>  ///<param name="path">  private void InitPath(string path)  {    Regex reg = new Regex(@"([^#?& ]*)(/??[^#]*)(#?[^?& ]*)");    Match match = reg.Match(path);    //路徑和查詢參數    this.PathName = match.Result("$1");    this.Search = match.Result("$2");    this.Hash = match.Result("$3");  }  #endregion   #region 參數處理  /// <summary>  /// 獲取當前參數解析結果字典列表  /// </summary>  /// <returns></returns>  public Dictionary<string, string=""> GetSearchList()  {    if (_SearchList != null)      return _SearchList;    _SearchList = new Dictionary<string, string="">();    if (!string.IsNullOrEmpty(Search))    {      Regex reg = new Regex(@"(^|&)?(/w+)=([^&]*)", RegexOptions.Compiled);      MatchCollection coll = reg.Matches(Search);      foreach (Match item in coll)      {        string key = item.Result("$2").ToLower();        string value = item.Result("$3");        _SearchList.Add(key, value);      }    }    return _SearchList;  }  /// <summary>  /// 獲取查詢參數的值  /// </summary>  ///<param name="key">鍵  /// <returns></returns>  public string GetSearchValue(string key)  {    return _SearchList[key];  }  /// <summary>  /// 添加參數key=value,如果值已經存在則修改  /// </summary>  ///<param name="key">鍵  ///<param name="value">值  /// <returns></returns>  public void AddOrUpdateSearch(string key, string value, bool Encode = false)  {    if (Encode)      value = HttpUtility.UrlEncode(value);    //判斷指定鍵值是否存在    if (_SearchList.ContainsKey(key))    {      _SearchList[key] = value;    }    else    {      _SearchList.Add(key, value);    }  }  /// <summary>  /// 刪除指定key 的鍵值對  /// </summary>  ///<param name="key">鍵  public void Remove(string key)  {    if (_SearchList.Any(q => q.Key == key))      _SearchList.Remove(key);  }  /// <summary>  /// 獲取錨點列表  /// </summary>  /// <returns></returns>  public List<string> GetHashList()  {    List<string> list = new List<string>();    if (!string.IsNullOrEmpty(Hash))    {      list = Hash.Split('#').Where(q => string.IsNullOrEmpty(q) == false)        .ToList();    }    return list;  }  #endregion  /// <summary>  /// 獲取最終url地址,  /// 對參數值就行UrlEncode 編碼后,有可能和原鏈接不相同  /// </summary>  /// <returns></returns>  public string GetUrl(bool EncodeValue = false)  {    StringBuilder builder = new StringBuilder();    if (!string.IsNullOrEmpty(Protocol))    {      //如果有協議      builder.Append(Protocol).Append("://");    }    //如果有主機標識    builder.Append(Host);    //如果有目錄和參數    if (!string.IsNullOrEmpty(PathName))    {      string pathname = PathName;      if (pathname.EndsWith("/"))        pathname = pathname.Substring(0, pathname.Length - 1);      builder.Append(pathname);    }    //判斷是否反斜杠    if (Slashes)    {      builder.Append("/");    }    Dictionary<string, string=""> searchList = GetSearchList();    if (searchList != null && searchList.Count > 0)    {      builder.Append("?");      bool isFirst = true;      foreach (var item in searchList)      {        if (isFirst == false)        {          builder.Append("&");        }        isFirst = false;        builder.AppendFormat("{0}={1}", item.Key, EncodeValue ? HttpUtility.UrlEncode(item.Value) : item.Value);      }    }    //錨點    builder.Append(Hash);    return builder.ToString();  }  #region 靜態方法  /// <summary>  /// 獲取源字符串中所有的鏈接(可能有重復)  /// </summary>  ///<param name="content">源字符串  /// <returns></returns>  public static List<string> GetUrlList(string content)  {    List<string> list = new List<string>();    Regex re = new Regex(@"(?<url>http(s)?://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?)");    MatchCollection mc = re.Matches(content);    foreach (Match m in mc)    {      if (m.Success)      {        string url = m.Result("${url}");        list.Add(url);      }    }    return list;  }  /// <summary>  /// 將字符串中的鏈接成標簽  /// </summary>  ///<param name="content">  /// <returns></returns>  public static string ReplaceToA(string content)  {    Regex re = new Regex(@"(?<url>http(s)?://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?)");    MatchCollection mc = re.Matches(content);    foreach (Match m in mc)    {      content = content.Replace(m.Result("${url}"), String.Format("</url>{0}", m.Result("${url}")));    }    return content;  }  #endregion}</url></string></string></string></string,></string></string></string></string,></string,></string,></string,>

所屬源代碼庫:https://github.com/tianma3798/Common

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久韩剧网电视剧| 欧美性猛xxx| 亚洲成人精品久久久| 色哟哟网站入口亚洲精品| 国产精品都在这里| 日韩免费电影在线观看| 亚洲色图美腿丝袜| 91免费人成网站在线观看18| 成人免费在线视频网站| 亚洲视频axxx| 国产在线不卡精品| 亚洲国产97在线精品一区| 日韩中文有码在线视频| 中文字幕久久久| 亚洲的天堂在线中文字幕| 亚洲无限乱码一二三四麻| 国产精品盗摄久久久| 久久久免费观看视频| 国内精品小视频在线观看| 国产精品无av码在线观看| 国内揄拍国内精品少妇国语| 国产日韩欧美黄色| 欧美日韩亚洲91| 深夜福利亚洲导航| 亚洲a级在线播放观看| 亚洲精品国产精品久久清纯直播| 亚洲日韩欧美视频一区| 精品久久久中文| 日韩精品免费综合视频在线播放| 国产极品精品在线观看| 午夜欧美不卡精品aaaaa| 97av在线播放| 亚洲视频一区二区三区| 欧美激情视频在线观看| 国产精品视频精品| 日韩电视剧在线观看免费网站| 亚洲午夜精品久久久久久久久久久久| 亚洲欧美另类国产| 4438全国成人免费| 91成人天堂久久成人| 国产精品久久久久一区二区| 国产欧美精品va在线观看| 欧美激情网站在线观看| 日韩黄在线观看| 国产经典一区二区| 亚洲国产精品成人精品| 夜夜嗨av色综合久久久综合网| 国产日韩精品电影| 福利一区视频在线观看| 欧美高清在线观看| 国产不卡av在线免费观看| 大量国产精品视频| 精品久久久久久国产| 亚洲国产欧美一区二区三区久久| 亚洲理论片在线观看| 欧美黑人xxxⅹ高潮交| 久久久久久美女| 亚洲久久久久久久久久| 亚洲激情成人网| 中文字幕视频在线免费欧美日韩综合在线看| 在线看国产精品| 日本精品一区二区三区在线播放视频| 91久久精品久久国产性色也91| 国内精品一区二区三区| 91亚洲永久免费精品| 亚洲天堂色网站| 日韩av电影国产| 国产精品一区二区女厕厕| 色爱av美腿丝袜综合粉嫩av| 日韩一区二区欧美| 亚洲有声小说3d| 国产精品观看在线亚洲人成网| 亚洲xxxx3d| 91国在线精品国内播放| 中文在线资源观看视频网站免费不卡| 岛国精品视频在线播放| 2019最新中文字幕| 亚洲视频一区二区三区| 欧美二区乱c黑人| 日韩欧美精品免费在线| 久久韩国免费视频| 超碰日本道色综合久久综合| 国语对白做受69| 亚洲欧美日韩直播| 国产一区二区三区视频免费| 91久久精品国产91久久| 欧美专区在线视频| 日韩欧美国产中文字幕| 色伦专区97中文字幕| 欧美成年人视频| 欧美成人精品激情在线观看| 国产一区二区三区视频在线观看| 久久露脸国产精品| 国产精品久久久久国产a级| 亚洲第一色在线| 91在线中文字幕| 欧美大片欧美激情性色a∨久久| 日韩欧美在线观看| 2021久久精品国产99国产精品| 久久免费国产视频| 精品激情国产视频| 欧美激情xxxxx| 久久青草精品视频免费观看| 午夜精品免费视频| 亚洲人成啪啪网站| 国产精品日韩一区| 欧美日韩性生活视频| 97免费视频在线| 欧美资源在线观看| 亚洲自拍偷拍色图| 国产在线不卡精品| 91精品久久久久久久| 中文字幕在线看视频国产欧美| 久久久久久综合网天天| 国产亚洲一区二区在线| 性欧美亚洲xxxx乳在线观看| 国产精选久久久久久| 久久久国产在线视频| 精品久久中文字幕| 亚洲国产99精品国自产| 亚洲成av人乱码色午夜| 久久99久久99精品免观看粉嫩| 国产精品视频区1| 亚洲性夜色噜噜噜7777| 久久精品99国产精品酒店日本| 亚洲欧美激情在线视频| 日韩免费在线播放| 国内外成人免费激情在线视频| 久久精品99国产精品酒店日本| 色婷婷综合成人| 浅井舞香一区二区| 91欧美精品成人综合在线观看| 国精产品一区一区三区有限在线| 欧美有码在线观看视频| 亚洲天堂av在线播放| 国产视频精品xxxx| 亚洲欧美日韩在线高清直播| 在线丨暗呦小u女国产精品| 91网站在线看| 久久精品国产99国产精品澳门| 91久久精品久久国产性色也91| 欧美午夜精品久久久久久浪潮| 欧美另类在线观看| 国产视频自拍一区| 91精品国产高清久久久久久91| 亚洲国产中文字幕久久网| 久久久久久久一区二区| 亚洲成人激情图| 国产精品高精视频免费| 亚洲电影免费观看高清完整版在线| 久久久国产一区二区| 成人免费视频网址| 成人有码视频在线播放| 国产精品久久久久久久久影视| 欧美精品一区在线播放| 国产成人精品免高潮在线观看| 久久久久国色av免费观看性色| 国产日韩一区在线| 国产亚洲欧美日韩一区二区| 欧美激情精品久久久久久黑人| 亚洲国产精品久久久| 91精品国产综合久久久久久久久| 日韩午夜在线视频| 亚洲精品欧美日韩专区|