C#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

  }

}

时间: 2024-07-31 14:07:53

C#Url处理类的相关文章

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

UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年7月15日 http://www.cnblogs.com/fanshuyao/ Java代码   import java.util.Ha

Java下的URL生成类

该类用于生成一个可用的URL,方便URL的生成和管理. /** * 构造的URL * @author Alvin */ final public class UrlBuilder { // 协议名称 private String scheme; // 服务器名称 private String serverName; // 端口号 private int serverPort; // 上下文名称 private String[] paths; // 参数集合 private Map<String,

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

/* * @brief url封装类,将常用的url请求操作封装在一起 * */ class URL{ private $error; public function __construct(){ $this->error = new ErrorCase(); } /** * combineURL * 拼接url * @param string $baseURL 基于的url * @param array $keysArr 参数列表数组 * @return string 返回拼接的url */

OSChina 的URL重写处理类源码

此代码是 oschina 用来处理形如 http://www.oschina.net/p/tomcat 这样的URL的类 此类已经废弃,改用 http://www.oschina.net/code/snippet_12_2832 标签: OSCHINA [1].[代码] URLMappingServlet.java 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3

ThinkPHP框架系统源码解析——URL路由解析

1 一.ThinkPHP框架目录 2 /test/index.php //项目入口文件 3 /ThinkPHP/ThinkPHP.php //框架入口文件 4 5 Common 框架公共文件目录(函数库) 6 ThinkPHP/Common/runtime.php //框架初次运行文件 7 ThinkPHP/Common/common.php //框架基础函数库 8 ThinkPHP/Common/functions.php //标准模式公共函数库 9 10 Conf 框架配置文件目录 11 T

java类中调用servlet

一.Java中调用servlet说明: 我们有时可能需要在Java类中调用Servlet从而实现某些特殊的功能,在JavaAPI中提供了一个URL的类,其中openStream( )方法可以打开URL的连接,并返回一个用于该连接读入的InputStream. 二.Java中调用servlet应用举例: package com.solid.test; import java.io.BufferedReader; import java.io.IOException; import java.io.

java web项目,java类中获得WEB-INF路径

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 private static String getWebInfPath() {         URL url = 当前类.class.getProtectionDomain().getCodeSource().getLocation();         String path = url.toString();         int index = pat

Yii的URL助手

Url 帮助类 ? 获得通用 URL 记住 URLs 检查相对 URLs Url 帮助类提供一系列的静态方法来帮助管理 URL. 获得通用 URL ? 有两种获取通用 URLS 的方法 :当前请求的 home URL 和 base URL . 为了获取 home URL ,使用如下代码: $relativeHomeUrl = Url::home(); $absoluteHomeUrl = Url::home(true); $httpsAbsoluteHomeUrl = Url::home('ht

SpringMVC使用注解完成 URL 和 Controller &amp; 方法之间的映射细节

1. 使用 @RequestMapping 来进行 URL 和 类 及 方法之间的映射. 2. @RequestMapping 注解可以标识到类上面,也可以标识到方法上 1). 若类上面没有标识,则方法上面的直接相对于 WEB 应用的根目录 < a href ="helloworld?name=springMVC">Hello SpringMVC </a> 2). 若类上面有 @RequestMapping 标识,则类上面的 @RequestMapping 的