我想从相对 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/