C#中的URL分割?

12
我有一个像example.com/page?a=1&ret=/user/page2的URL。
我曾试用string.split('/')来获取路径,但在这种情况下它并不太实用。我该如何分割URL以便获取页面路径?
10个回答

29

如果你用你的字符串创建一个System.Uri对象,它将具有不同路径部分的几个属性:

string path = "http://example.com/page?a=1&ret=/user/page2";
Uri uri = new Uri(path);
Console.WriteLine(uri.AbsolutePath); // Prints "/page"

7
假设您的意思是想获取“page2”部分:
 var ub = new UriBuilder("example.com/page?a=1&ret=/user/page2");
 NameValueCollection nvc = HttpUtility.ParseQueryString(ub.Query);
 string page = nvc[nvc.Count - 1]; // gets "/user/page2"

然后您需要对剩余部分使用分割功能。

编辑: 您也可以使用System.IO.Path.GetFileNameWithoutExtension(page)将返回“page2”,但我不确定它是否正确。

System.IO.Path.GetFileNameWithoutExtension("example.com/page?a=1&ret=/user/page2")同样会返回"page2"。


1
我会使用nvc ["ret"]而不是数字索引,但是HttpUtility.ParseQueryString确实是一个好方法要知道。 - dahlbyk

5

请求的Url(Uri)对象具有许多与路径相关的有用属性。如果您需要的是整个QueryString,则可以从完整的url中取出它吗?

您还可以在页面本身上执行Server.MapPath,然后使用FileInfo对象查看文件本身的各个部分。


3

2

这是一个ASP.NET项目吗?在您的HttpHandler/Page中,您可以简单地使用Request对象:

string path = HttpContext.Request.Path;

如果您没有HttpContext,System.Uri可以提供类似的功能:
string path = new Uri("example.com/page?a=1&ret=/user/page2").AbsolutePath;

1

这似乎是使用 System.Uri 的好案例:

Uri uri = new Uri("example.com/page?a=1&ret=/user/page2");
System.Windows.Forms.MessageBox.Show(
"Absolute URI: " + uri.AbsoluteUri + "\r\n" +
"Absolute Path: " + uri.AbsolutePath + "\r\n" +
"Local path: " + uri.LocalPath + "\r\n" +
"Host: " + uri.Host + "\r\n" +
"Port: " + uri.Port + "\r\n" +
"Query: " + uri.Query + "\r\n");

0

当您使用Uri()时,它具有Segments,显示URL的所有部分。如果您需要返回page2部分,只需选择最后一个segment:

string path = "http://example.com/page?a=1&ret=/user/page2";
Uri uri = new Uri(path);
Console.WriteLine(uri.Segments.LastOrDefault()); // returns page2

0

请查看 System.Uri 类。它会将您的 URL 解析成片段。


0

UriBuilder 只有在创建后需要修改 URI 的某个部分时才有用。在这种情况下,似乎 Uri 将是只读的。 - dahlbyk

0
你可能还可以考虑使用内置在ASP.net 2.0中的Routing API,它将为你提供对URL路由的精细控制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接