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 % ) != )
{
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 == -)
{
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("的名片") > -)
{
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 == )
{
Authority = "www." + Authority;
}
int index = Authority.IndexOf('.', );
domain = Authority.Substring(index + , Authority.Length - index - ).Replace("comhttp","com");
subDomain = Authority.Replace("comhttp", "com");
if (ss.Length < )
{
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 == -)
{
baseUrl = url;
return;
}
baseUrl = url.Substring(, questionMarkIndex);
if (questionMarkIndex == url.Length - )
return;
string ps = url.Substring(questionMarkIndex + );
// 开始分析参数对
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
}
}

UrlOper的更多相关文章

  1. C# 各种帮助类大全

    前言 此篇专门记录一些常见DB帮助类及其他帮助类,以便使用时不用重复造轮子. DBHelper帮助类 ①首当其冲的就是Sql Server帮助类,创建名为DbHelperSQL 的类 ,全部代码如下: ...

  2. C#Url处理类

    using System; using System.Text.RegularExpressions; using System.Web; using System.Collections.Speci ...

  3. C#类库帮助类

    前言 此篇专门记录一些常见DB帮助类及其他帮助类,以便使用时不用重复造轮子. DBHelper帮助类 ①首当其冲的就是Sql Server帮助类,创建名为DbHelperSQL 的类 ,全部代码如下: ...

随机推荐

  1. Java 吸血鬼数字

    非常羞愧(事实上没什么羞愧.水平就这样).搞了半晌才写出来了一个Java 版求四位吸血鬼数字的方法 吸血鬼数字是指位数为偶数的数字.能够由一对数字相乘而得到.而这对数字各包括乘积的一半位数的数字,当中 ...

  2. Struts2(四)Action一接收参数

    一.属性接收参数并输出 导入struts2的包,导入需要的包 和struts.xml配置文件 <?xml version="1.0" encoding="UTF-8 ...

  3. 【Linux】数组与关联数组

    数组 数组的定义: variable=(arg1 arg2 arg3 -) 中间用空格分开,数组的下标从0开始 1.获取下标为n的元素 variable[n] 不存在数组溢出的情况,如果下标n> ...

  4. 类的专有方法(__getitem__和__setitem__)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #http://www.imooc.com/code/6252 #类的专有方法(__getitem__和__s ...

  5. Android 4 编程入门经典

    这是一本入门级的经典教才从Android编程入门到发布Android应用程序,每一个章节都是讲得很透,让人轻松的接受. 第1章 Android编程入门 1.1 Android简介 1.1.1 Andr ...

  6. 基于.net 的加载自定义配置-误操作

    有时候 需要 将程序加载自定义的配置文件,除了自己写解析xml文件.内置的ConfigutionManager对象 是个不错的选项. 按照 app.config 的方式,做一个副本.然后从你的配置文件 ...

  7. highstock高级篇之股票分时图

    一直在用 highchart 在做图表,最近一段时间突然接到一活,需要用 highstock 帮客户完成一个股票K线图和分时图.虽然用法和 api上与 highchart 没什么区别,但还是研究一番做 ...

  8. static不实现多态

    class Father { public static String getName() { return "father"; } } class Children extend ...

  9. CTF入门

    一.抓包工具 Fiddler:轻量级,简洁,原理是使用代理 有一个大坑,如果打开抓包工具,运行Python Requests发起网络请求,Python程序会运行得非常慢,所以必须把抓包工具关掉才可以快 ...

  10. wamp2.4-- 为WAMP中的mysql设置密码密码

    WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 1.首先,通过WAMP打开mysql控制台.提示输入密码,因为现在是空,所以直接按回 ...