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#Url处理类的更多相关文章

  1. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  2. URL工具类

    UrlUtils = { /** * 判断url是否存在(存在跨域问题) * @param {String} url */ isTrueUrl: function(_url) { result = f ...

  3. java中的URL InetAddress类

    /* * InetAddress类: * 用于标识网络上的硬件资源,表示互联网协议(ip)地址,是java对ip地址的封装. * 其实例对象包含以数字形式保存的IP地址,主机名. * InetAddr ...

  4. php 对url 操作类:url拼接、get获取页面、post获取页面(带传参)

    /* * @brief url封装类,将常用的url请求操作封装在一起 * */ class URL{ private $error; public function __construct(){ $ ...

  5. 使用URL工具类调用webservice接口(soap)与http接口的实现方式

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  6. ASP.NET @URL帮助类

    原文: https://www.cnblogs.com/bobo-show/p/5746389.html    https://www.cnblogs.com/zhuji/p/7698057.html ...

  7. Java 使用URL类通过url下载网络资源

    主要用到的类 地址类: URL http类: HttpURLConnection 输入流: InputStream 输出流: FileOutputStream 上代码 package com.demo ...

  8. JS 工具类

    之前工作用的JavaScript比较多,总结了一下工具类,和大家分享一下,有不足之处还请多多见谅!! 1. 数组工具类(arrayUtils) var arrayUtils = {}; (functi ...

  9. ASP.NET MVC 5 Web编程2 -- URL映射(路由原理)

    本章将讲述ASP.NET MVC5 的路由原理,即URL映射机制. 简单点就是解释:为什么MVC在浏览器输入地址就能访问到类(或类中的方法)?这是怎么做到的?我自己可以通过.NET写出一个自己的MVC ...

随机推荐

  1. 软工网络16个人作业2——WordCount

    Deadline: 2018-9-17 22:00PM,以博客提交至班级博客时间为准 要求参考来自:https://www.cnblogs.com/xinz/archive/2011/11/27/22 ...

  2. spring的第一天

    spring的第一天 ssm框架 spring  Spring是什么? Spring是容器框架,用来配置(装)Bean,并且维护Bean之间的关系.其中Bean可以是Java中的任何一种对象,可以是J ...

  3. webpack4打包报错:WARNING in configuration The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults fo

    运行命令webpack ./src/main.js ./dist/murenziwei.js后,目录上神马动静都没有,你以为在dist文件夹上会有murenziwei.js吗?毛都没有 警告和错误倒是 ...

  4. Java技术开发中的坑

    1.(2014/05/28)struts2中使用eclipse自动获取getter和setter方法的坑 今天着实被eclipse坑了一把,平时遇到get和set方法时,我都是通过eclipse自动生 ...

  5. openssl rsautl和openssl pkeyutl(文件的非对称加密)

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成 ...

  6. js------保留指定位数小数

    // tofix.js文件// params// val: 要处理的数据,Number | String// len: 保留小数位数,位数不足时,以0填充// side: 1|-1 对应 入|舍exp ...

  7. [转]来扯点ionic3[7] LocalStorage的使用—以登录和注销为例

    本文转自:https://segmentfault.com/a/1190000012146400 一般意义上,一个互联网 APP 中的数据主自与服务器的交互,但是对于有些数据,我们希望获取到它们以后能 ...

  8. java命令运行带包的类

    类文件d:\test2.java package b; public class test2 {    public static void main(String[] args) {         ...

  9. c# 封装Dapper操作类

    using Dapper; using DapperExtensions; using System.Collections.Generic; using System.Configuration; ...

  10. oracle sql优化的几种方法

    1.最基本最简单的方式是减少访问数据库的次数.oracle在内部执行了许多工作,比如解析SQL语句, 估算索引的利用率,  读数据块等等,都将大量耗费oracle数据库的运行 2.选择最有效率的表名顺 ...