.net - 解析相对 URI

标签 .net uri

我想从相对 URI 中提取查询字符串和片段,即没有任何方案或主机信息的 URI。

有没有比将其转换为带有假主机名的绝对 URI 更优雅的方法呢?

var relativeUri = "/dir1/dir2/file?a=b&c=d#fragment";
var uri = new Uri(new Uri("http://example.com"), relativeUri);
var path = Uri.UnescapeDataString(String.Concat(uri.Segments));
var query = uri.Query;
var fragment = uri.Fragment;
// path = "/dir1/dir2/file", query = "?a=b&c=d", fragment = "#fragment"

最佳答案

虽然你可以创建一个 Uri如果没有主机部分,其大部分属性将抛出 InvalidOperationException(“相对 URI 不支持此操作”),因为这些属性依赖于绝对 Uri。

HttpUtility.ParseQueryString() 确实不会在这里提供帮助,因为它只对 Uri 的查询部分进行操作,您无法获得该部分,因为您没有绝对的 Uri。

因此,虽然它可能看起来很笨拙,但我认为 new Uri(baseUri, relativeUri)构造函数正是你想要的。我似乎找不到更好或更干净的方法来完成同样的任务。

关于.net - 解析相对 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565069/

相关文章:

.net - 与容器上RabbitMQ的连接问题

.NET .resx 文件 : why does name attribute often start with >>

java - 创建 SEO 友好 URI 字符串的最佳方式

c# - Uri.AbsoluteUri 与 Uri.OriginalString

ruby - URI Extract 在冒号处转义,有什么办法可以避免这种情况?

c# - 只查找非继承接口(interface)?

c# - 如何在 .net 中创建动画 gif

http - REST 问题 : PUT one representation, 换一个?

android - 内容 ://mms-sms/conversations/return NullPointerException at Android ICS Samsung

c# - 这种使用静态队列线程安全吗?