如何针对给定字符串URL使用HttpContext获取各类URL属性
如何解析独立URL字符串获取HttpContext风格的URL属性
当然可以实现!你之前的代码依赖HttpContext.Current.Request.Url来获取当前HTTP请求的URL信息,但如果只是要解析一个独立的字符串URL,完全不需要依赖请求上下文,直接用.NET内置的Uri类就能实现一模一样的效果。
完整代码示例
string url = "https://subdomain.domain.com/link1/"; // 把字符串URL转换成Uri对象 Uri parsedUri = new Uri(url); // 对应你需要的各个属性 Console.WriteLine("<br/>Host: " + parsedUri.Host); Console.WriteLine("<br/>Authority: " + parsedUri.Authority); Console.WriteLine("<br/>Port: " + parsedUri.Port); Console.WriteLine("<br/>AbsolutePath: " + parsedUri.AbsolutePath); // 注意:ApplicationPath是ASP.NET特有的属性,Uri类没有对应项,下文会解释 Console.WriteLine("<br/>AbsoluteUri: " + parsedUri.AbsoluteUri); Console.WriteLine("<br/>PathAndQuery: " + parsedUri.PathAndQuery);
属性对应说明
- Host:和
HttpContext中的行为完全一致,返回域名部分(这里就是subdomain.domain.com) - Authority:返回主机名+端口号(如果是默认端口,比如HTTPS的443、HTTP的80,会自动省略,和
HttpContext的输出一致) - Port:返回URL的端口号,HTTPS默认是443,HTTP默认是80
- AbsolutePath:返回URL的路径部分(这里就是
/link1/) - ApplicationPath:这个属性是ASP.NET特有的,代表当前应用程序的部署根路径(比如你的应用部署在
/MyApp/下,这个值就是/MyApp/)。对于独立的URL字符串,Uri类不知道你的应用部署环境,所以没有这个属性。如果需要模拟,你可以根据自己的应用部署路径手动定义,或者从URL中提取特定路径段。 - AbsoluteUri:返回完整的URL字符串,和你输入的
url变量完全一致 - PathAndQuery:返回路径+查询参数(如果URL有查询参数的话,比如
?id=1,会一起返回;这里没有查询参数,所以就是/link1/)
额外提示
如果你是在ASP.NET项目中,但只是想解析一个自定义URL(不是当前请求的URL),同样可以用这个方法,不需要去碰HttpContext,避免耦合请求上下文。
内容的提问来源于stack exchange,提问作者Crawl
相关产品推荐
相关产品推荐

