• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#Url操作类封装、仿Node.Js中的Url模块实例

C#Url操作类封装、仿Node.Js中的Url模块实例

作者:天马3798 字体:[增加 减小] 来源:互联网 时间:2017-05-28

天马3798 通过本文主要向大家介绍了c#url编码,c#url,c#url转码,c#url编码问题,c#url解码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在实际开发中,需要用到的数据在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));
</div>

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>
</div>

属性和部分功能模仿了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地址,
  ///



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#Url操作类封装、仿Node.Js中的Url模块实例
  • C#实现类似新浪微博长URL转短地址的方法
  • C#自定义针对URL地址的处理类实例
  • C#分析URL参数并获取参数和值对应列表的方法
  • C# URL短地址压缩算法及短网址原理解析
  • C#的编码规范详细说明
  • C#关于反射加载的问题

相关文章

  • 2017-05-28C#线程池用法详细介绍
  • 2017-05-28C#实现在listview中插入图片实例代码
  • 2017-05-28C#使用xsd文件验证XML格式是否正确的实现方法
  • 2017-05-28C#使用foreach语句遍历集合类型的方法
  • 2017-05-28C#实现两接口中同名方法实例分析
  • 2017-05-28解析StreamReader与文件乱码问题的解决方法
  • 2017-05-28C#使用Process类调用外部exe程序
  • 2017-05-28c#连接access数据库操作类分享
  • 2017-05-28Winform学生信息管理系统各子窗体剖析(3)
  • 2017-05-28在Linux上运行C#的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#读取Excel并转化成XML的方法
    • C#窗体间通讯处理的几种方法总结
    • C#采用OpenXml实现给word文档添加文字
    • c# 托盘双击不触发单击事件的实现方法
    • C#留言时间格式化
    • C#使用webbrowser的常见用法实例
    • 解析在内部循环中Continue外部循环的使用详解
    • C#中Byte转换相关的函数
    • C#实现将日志写入文本文件的方法
    • C#使用foreach遍历哈希表(hashtable)的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有