System.Uri类 - 获取Url的各种属性,文件名,参数,域名,端口等等
System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类。
一、属性
AbsolutePath 获取 URI 的绝对路径。
AbsoluteUri 获取绝对 URI。
Authority 获取服务器的域名系统 (DNS) 主机名或 IP 地址和端口号。
DnsSafeHost 获得可安全用于 DNS 解析的未转义主机名。
Fragment 获取转义 URI 片段。
Host 获取此实例的主机部分。
HostNameType 获取 URI 中指定的主机名的类型。
IsAbsoluteUri 获取一个值,该值指示 Uri 实例是否为绝对 URI。
IsDefaultPort 获取一个值,该值指示 URI 的端口值是否为此方案的默认值。
IsFile 获取一个值,该值指示指定的 Uri 是否为文件 URI。
IsLoopback 获取一个值,该值指示指定的 Uri 是否引用了本地主机。
IsUnc 获取一个值,该值指示指定的 Uri 是否为统一命名约定 (UNC) 路径。
LocalPath 获取文件名的本地操作系统表示形式。
OriginalString 获取传递给 Uri 构造函数的原始 URI 字符串。
PathAndQuery 获取用问号 (?) 分隔的 AbsolutePath 和 Query 属性。
Port 获取此 URI 的端口号。
Query 获取指定 URI 中包括的任何查询信息。
Scheme 获取此 URI 的方案名称。
Segments 获取包含构成指定 URI 的路径段的数组。
UserEscaped 指示 URI 字符串在创建 Uri 实例之前已被完全转义。
UserInfo 获取用户名、密码或其他与指定 URI 关联的特定于用户的信息。

class Program
{
static void Main(string[] args)
{
Uri uri = new Uri("http://www.baidu.com:80/2013/123.html?id=1"); Console.WriteLine(uri.AbsolutePath); //输出 /2013/123.html
Console.WriteLine(uri.AbsoluteUri); //输出 http://www.baidu.com/2013/123.html?id=1
Console.WriteLine(uri.Authority); //输出 www.baidu.com
Console.WriteLine(uri.DnsSafeHost); //输出 www.baidu.com
Console.WriteLine(uri.Fragment); //输出
Console.WriteLine(uri.Host); //输出 www.baidu.com
Console.WriteLine(uri.IsAbsoluteUri); //输出 True
Console.WriteLine(uri.IsDefaultPort); //输出 True
Console.WriteLine(uri.IsFile); //输出 False Uri uri1 = new Uri(@"D:\test\test.txt");
Console.WriteLine(uri1.IsFile); //输出 True Console.WriteLine(uri.IsLoopback); //输出 False
Console.WriteLine(uri1.IsLoopback); //输出 True Console.WriteLine(uri.IsUnc); //输出 False
Console.WriteLine(uri.LocalPath); //输出 /2013/123.html
Console.WriteLine(uri.OriginalString); //输出 http://www.baidu.com:80/2013/123.html
Console.WriteLine(uri.PathAndQuery); //输出 /2013/123.html?id=1
Console.WriteLine(uri.Port); //输出 80
Console.WriteLine(uri.Query); //输出 ?id=1
Console.WriteLine(uri.Scheme); //输出 http
string[] strArr = uri.Segments;
foreach (string str in strArr)
{
Console.WriteLine(str); //输出 / 2013/ 123.html
} Console.WriteLine(uri.UserEscaped); //输出 False;
Console.WriteLine(uri.UserInfo); //输出 Console.ReadKey();
}
}

二、方法
CheckHostName 确定指定的主机名是否为有效的 DNS 名称。
CheckSchemeName 确定指定的方案名是否有效。
Compare 使用指定的比较规则比较两个 URI 的指定部分。
EscapeDataString 将字符串转换为它的转义表示形式。
EscapeUriString 将 URI 字符串转换为它的转义表示形式。
FromHex 获取十六进制数字的十进制值。
GetComponents 使用特殊字符的指定转义,获取当前实例的指定部分。
GetLeftPart 获取 Uri 实例的指定部分。
GetObjectData 返回序列化当前实例所需的数据。
HexEscape 将指定的字符转换它的等效十六进制字符。
HexUnescape 将字符的指定十六进制表示形式转换为字符。
IsBaseOf 确定当前的 Uri 实例是否为指定 Uri 实例的基。
IsHexDigit 确定指定的字符是否为有效的十六进制数字。
IsHexEncoding 确定字符串中的一个字符是否为十六进制编码。
IsWellFormedOriginalString 指示用于构造此 Uri 的字符串是否格式良好,以及它是否不需要进一步转义。
IsWellFormedUriString 通过尝试用字符串构造一个 URI 来指示字符串是否为格式良好的,并确保字符串不需要进一步转义。
MakeRelativeUri 确定两个 Uri 实例之间的差异。
TryCreate 已重载。 创建一个新的 Uri。在无法创建 Uri 时不引发异常。
UnescapeDataString 将字符串转换为它的非转义表示形式。

class Program
{
static void Main(string[] args)
{ Uri uri = new Uri("http://www.baidu.com:80/2013/123.html?id=1");
UriHostNameType unt = Uri.CheckHostName("http://www.baidu.com");
Console.WriteLine(unt.ToString()); //输出Unknown UriHostNameType 是一个枚举,定义主机名类型 Console.WriteLine(Uri.CheckSchemeName("http://www.baidu.com")); //输出 False
Console.WriteLine(Uri.CheckSchemeName("http")); //输出 True
Console.WriteLine(Uri.CheckSchemeName("https")); //输出 True
//Uri uri1 = new Uri("http://www.baidu.com");
//Uri.Compare(uri,uri1); //Uri.EscapeDataString对冒号(:)、斜杠(/)、空格、中文、井号(#)都进行了编码,可对参数编码
Console.WriteLine(Uri.EscapeDataString("http://www.baidu.com:80/2013/123.html?id=1")); //输出 http%3A%2F%2Fwww.baidu.com%3A80%2F2013%2F123.html%3Fid%3D1 Uri转义
//Uri.EscapeUriString对空格进行了编码,也对中文进行了编码,但对冒号(:)、斜杠(/)和井号(#)未编码,所以此方法可以用于网址进行编码,但不能对参数进行编码
//Uri.EscapeUriString对URI的网址部分编码,用Uri.EscapeDataString对URI中传递的参数进行编码。
Console.WriteLine(Uri.EscapeUriString("http://www.baidu.com:80/2013/123.html?id=1&你好"));//输出 http://www.baidu.com:80/2013/123.html?id=1&%E4%BD%A0%E5%A5%BD string str = "http%3A%2F%2Fwww.baidu.com%3A80%2F2013%2F123.html%3Fid%3D1";
Console.WriteLine(Uri.UnescapeDataString(str)); //输出 http://www.baidu.com:80/2013/123.html?id=1 , 将Url还原成不转义的形式 Console.WriteLine(Uri.FromHex('A')); //输出 10 获取16进制数字的十进制值
Console.WriteLine(Uri.HexEscape('2')); //输出 %32 转换它的等效十六进制字符。
Console.WriteLine(Uri.IsHexDigit('F')); //输出True 确定指定的字符是否为有效的十六进制数字。 int index = 0;
if (Uri.IsHexEncoding("%75", index))
Console.WriteLine("该编码代表的字符是 :{0}", Uri.HexUnescape("%75", ref index));
else
Console.WriteLine("这不是16禁止编码"); //以下两个实例方法GetLeftPart与GetComponents都用于获取Uri中的一部分,可以是端口,方案,参数等等。
Console.WriteLine(uri.GetComponents(UriComponents.Scheme,UriFormat.Unescaped)); //输出 http 获取Uri中的一部分,两个参数都是枚举
Console.WriteLine(uri.GetLeftPart(UriPartial.Scheme)); //输出 http:// Uri uri1 = new Uri("Http://www.baidu.com");
Console.WriteLine(uri.IsBaseOf(uri1)); //输出 False
Console.WriteLine(uri1.IsBaseOf(uri)); //输出 True //TryCreate也可用于相对路径转绝对路径,返回一个新的uri并且不成功时不报异常
Uri uri2 = new Uri("http://www.baidu.com/a/b/c.html");
Uri uri3;
Uri.TryCreate(uri2,"../123.html",out uri3);
Console.WriteLine(uri3); //输出 http://www.baidu.com/a/123.html Uri uri4 = uri2.MakeRelativeUri(uri3);
Console.WriteLine(uri4); //输出..123/html
//再来一个 Uri uri5 = new Uri("http://www.baidu.com/a/b/d.html");
Uri uri6 = new Uri("http://www.baidu.com/a/b/c.html"); Uri uri7 = uri5.MakeRelativeUri(uri6);
Console.WriteLine(uri7); //输出 c.html //这样就表示目录相同,文件名不同,相对于第一个调用Uri来说的 //确定文件是否不需要转义,没特殊字符就不需要转移
//以下两个方法基本一致,只是一个是静态方法,一个是实例方法而已
Console.WriteLine(Uri.IsWellFormedUriString("http://www.baidu.com", UriKind.Absolute)); //输出 True UriKind是一个枚举
Console.WriteLine(Uri.IsWellFormedUriString("http://www.baidu.com/123.html?名字=张三", UriKind.Absolute)); //输出 False 表示需要转义 Console.WriteLine(uri.IsWellFormedOriginalString()); //True 此 Uri 的字符串是否格式良好,以及它是否不需要进一步转义。
Uri uri8 = new Uri("http://www.baidu.com/123.html?名字=张三");
Console.WriteLine(uri8.IsWellFormedOriginalString()); //输出False
Console.ReadKey();
}
}

有时间要看好点,这个类还是很有用的。
另附上一个常用的功能,相对Uri转绝对Uri,这是是利用构造函数实现的,传入一个baseUri就能够实现,如如下代码:

static void Main(string[] args)
{
Uri uri = new Uri("http://www.jmeii.com/a/b/index.html");
Uri uri2 = new Uri(uri,"../123.html");
Console.WriteLine(uri2.ToString()); //输出http://www.jmeii.com/a/123.html Console.ReadKey();
}
System.Uri类 - 获取Url的各种属性,文件名,参数,域名,端口等等的更多相关文章
- C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等
System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类. 一.属性 AbsolutePath 获取 URI ...
- C# 获取url中的查询字符串参数
/// <summary> /// 获取url中的查询字符串参数 /// </summary> public static NameValueCollection Extrac ...
- php获取url?后面的拼接参数
$outurl = urldecode($_SERVER['QUERY_STRING']);
- asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法
转:http://blog.csdn.net/llll29550242/article/details/6054323 ASP.net后台获取当前页面的文件名 System.IO.Path.GetFi ...
- 78、WebClient实现上传下载 System.Net、System.Uri类
高层类.使用简单.均支持异步版本.支持http,https,fpt,files等URI. 一.下载 方法: Stream= client.OpenRead(serverUri): 打开一个可读的流.对 ...
- [工具类]获取url中参数列表
写在前面 在项目中经常用到解析url中参数的逻辑,今天先下载就自己封装了一个方法,方便以后使用的时候,信手拈来.当然这里给出的方法是针对常见的url参数类型的,对于重写url,或者路由格式的不考虑. ...
- asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
用 asp.net获取当前网页地址的一些信息. 设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http:// ...
- js获取url传递参数,js获取url?号后面的参数
方法一.正则表达式 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...
- 获取url特定字后面的参数
var type = getUrlParam('type') ?getUrlParam('type' ):'' ; //获取url中的参数 function getUrlParam( name) { ...
随机推荐
- Android Studio环境下代码混淆+签名打包
Android Studio环境下代码混淆+签名打包 作者 Mr_冯先生 关注 2016.08.21 01:10 字数 1040 阅读 734评论 5喜欢 34 注:本文使用的Android Stud ...
- XOR and Favorite Number(莫队算法+分块)
E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- 永洪BI配置测试及遇到的一些问题
1.连oracle 11g数据库遇到密码不能验证通过. 在11g中, 数据库默认密码的大小写是敏感的,jdbc在给oracle密码时, 会将其变成大写.其他个别情况也会出现变成小写的. 为统一,去除o ...
- 设计模式 -- 解释器模式(Interpreter Pattern)
2015年12月15日00:19:02 今天只看了理论和demo,明天再写文章,跑步好累 2015年12月15日21:36:00 解释器模式用来解释预先定义的文法. <大话设计模式>里面这 ...
- Linux常用命令及重要目录文件分析总结
1.用户切换和更改密码 sudo -i / sudo su --->切换到root用户 su user --->从root用户切换回普通用户(/home/user) sudo passwd ...
- MySQL 5.5 禁用 innodb
MySQL 5.5 禁用 innodb 编辑: my.ini 添加: default-storage-engine=MYISAM skip-innodb
- 【留念贴】Android开发——计算器
[过程] 在电商学霸&&代码女神XuFei的影响下,接触到了关于Android客户端的一些开发,第一次在Android平台搞出了一个App,真的是激动不已,所以必须开个留念贴记录一下. ...
- zoj 2913 Bus Pass
对于每个输入的站点求出所有点到这个站点的最短路.用anss数组存下来,然后就可以用anss数组求出答案了. 题目分析清楚了 还是比较水的,折腾了一早上.. #include<stdio.h> ...
- GBDT详解
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决 ...
- visual studio2013 apache cordova基于web的跨平台应用
目前在研究微软的visual studio 2013开发跨平台的android.ios.windows phone.当然是基于html javascript css的web跨平台app. 在visua ...