首页 > 编程 > C# > 正文

C#自定义针对URL地址的处理类实例

2020-01-24 02:05:31
字体:
来源:转载
供稿:网友

本文实例讲述了C#自定义针对URL地址的处理类。分享给大家供大家参考。具体分析如下:

这个C#类是专门针对URL网址处理的类,可以对URL地址进行Base64的加密和解密,可以通过函数的方式向URL添加参数,可以更新URL中已有参数的值,分析URL地址的域名、子域名,分析URL的所有参数和参数值,功能非常全面,还可以自己扩充,非常具有实用价值

using System;using System.Text.RegularExpressions;using System.Web;using System.Collections.Specialized;namespace DotNet.Utilities{  /// <summary>  /// URL的操作类  /// </summary>  public class UrlOper  {    static System.Text.Encoding encoding = System.Text.Encoding.UTF8;    #region URL的64位编码    public static string Base64Encrypt(string sourthUrl)    {      string eurl = HttpUtility.UrlEncode(sourthUrl);      eurl = Convert.ToBase64String(encoding.GetBytes(eurl));      return eurl;    }    #endregion    #region URL的64位解码    public static string Base64Decrypt(string eStr)    {          if (!IsBase64(eStr))      {        return eStr;      }      byte[] buffer = Convert.FromBase64String(eStr);      string sourthUrl = encoding.GetString(buffer);      sourthUrl = HttpUtility.UrlDecode(sourthUrl);      return sourthUrl;    }    /// <summary>    /// 是否是Base64字符串    /// </summary>    /// <param name="eStr"></param>    /// <returns></returns>    public static bool IsBase64(string eStr)    {      if ((eStr.Length % 4) != 0)      {        return false;      }      if (!Regex.IsMatch(eStr, "^[A-Z0-9/+=]*$", RegexOptions.IgnoreCase))      {        return false;      }      return true;    }    #endregion    /// <summary>    /// 添加URL参数    /// </summary>    public static string AddParam(string url, string paramName, string value)    {      Uri uri = new Uri(url);      if (string.IsNullOrEmpty(uri.Query))      {        string eval = HttpContext.Current.Server.UrlEncode(value);        return String.Concat(url, "?" + paramName + "=" + eval);      }      else      {        string eval = HttpContext.Current.Server.UrlEncode(value);        return String.Concat(url, "&" + paramName + "=" + eval);      }    }    /// <summary>    /// 更新URL参数    /// </summary>    public static string UpdateParam(string url, string paramName, string value)    {      string keyWord = paramName+"=";      int index = url.IndexOf(keyWord)+keyWord.Length;      int index1 = url.IndexOf("&", index);      if (index1 == -1)      {        url = url.Remove(index, url.Length - index);        url = string.Concat(url, value);        return url;      }      url = url.Remove(index,index1 - index);      url = url.Insert(index, value);      return url;    }    #region 分析URL所属的域    public static void GetDomain(string fromUrl, out string domain, out string subDomain)    {      domain = "";      subDomain = "";      try      {        if (fromUrl.IndexOf("的名片") > -1)        {          subDomain = fromUrl;          domain = "名片";          return;        }        UriBuilder builder = new UriBuilder(fromUrl);        fromUrl = builder.ToString();        Uri u = new Uri(fromUrl);        if (u.IsWellFormedOriginalString())        {          if (u.IsFile)          {            subDomain = domain = "客户端本地文件路径";          }          else          {            string Authority = u.Authority;            string[] ss = u.Authority.Split('.');            if (ss.Length == 2)            {              Authority = "www." + Authority;            }            int index = Authority.IndexOf('.', 0);            domain = Authority.Substring(index + 1, Authority.Length - index - 1).Replace("comhttp","com");            subDomain = Authority.Replace("comhttp", "com");            if (ss.Length < 2)            {              domain = "不明路径";              subDomain = "不明路径";            }          }        }        else        {          if (u.IsFile)          {            subDomain = domain = "客户端本地文件路径";          }          else          {            subDomain = domain = "不明路径";          }        }      }      catch      {        subDomain = domain = "不明路径";      }    }    /// <summary>    /// 分析 url 字符串中的参数信息。    /// </summary>    /// <param name="url">输入的 URL</param>    /// <param name="baseUrl">输出 URL 的基础部分</param>    /// <param name="nvc">输出分析后得到的 (参数名,参数值) 的集合</param>    public static void ParseUrl(string url, out string baseUrl, out NameValueCollection nvc)    {      if (url == null)        throw new ArgumentNullException("url");      nvc = new NameValueCollection();      baseUrl = "";      if (url == "")        return;      int questionMarkIndex = url.IndexOf('?');      if (questionMarkIndex == -1)      {        baseUrl = url;        return;      }      baseUrl = url.Substring(0, questionMarkIndex);      if (questionMarkIndex == url.Length - 1)        return;      string ps = url.Substring(questionMarkIndex + 1);      // 开始分析参数对        Regex re = new Regex(@"(^|&)?(/w+)=([^&]+)(&|$)?", RegexOptions.Compiled);      MatchCollection mc = re.Matches(ps);      foreach (Match m in mc)      {        nvc.Add(m.Result("$2").ToLower(), m.Result("$3"));      }    }    #endregion  }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表