gpt4 book ai didi

c# - 如何访问使用 UriKind.Relative 定义的 Uri 的属性

转载 作者:行者123 更新时间:2023-11-30 22:59:10 25 4
gpt4 key购买 nike

我的方法接收 URI 作为字符串并尝试将其解析为可预测且一致的格式。传入 URL 可以是绝对的 ( http://www.test.com/myFolder ) 或相对的 (/myFolder)。绝对 URI 很容易使用,但我在使用相对 URI 时遇到了一些障碍。最值得注意的是,尽管 Uri 的构造函数允许您使用 UriKind.Relative(或 UriKind.RelativeOrAbsolute)指定相对 URI ,当您执行此操作时,它似乎没有任何可用的属性。

具体来说,它抛出这个异常:System.InvalidOperationException : This operation is not supported for a relative URI.

您无法访问,比如说,SchemeAuthority 属性是有道理的——尽管它们实际上抛出无效操作异常似乎很奇怪而不仅仅是返回空白字符串——甚至像 PathAndQueryFragment 这样的属性也表现出相同的行为。事实上,几乎唯一不会为相对 URI 抛出异常的属性是 IsX 标志和 OriginalString,它仅显示您传递给对象的字符串首先。

鉴于该构造函数明确允许您声明相对 URI,这一切似乎都是一个令人费解的遗漏。我在这里缺少什么吗? 有什么方法可以将相对 URI 作为其组成部分来处理,还是我只需要将其视为字符串?在这种情况下,我是否完全无法理解“相对 URI”的含义? p>

复制:

var uri = new Uri("/myFolder");
string foo = uri.PathAndQuery; // throws exception

Visual Studio 专业版 2015,.NET 4.5.2(如果其中任何一个有所不同)

最佳答案

访问 eg 时会抛出异常是设计使然。 PathAndQuery 的相对 uri,参见 uri source code .

作为解析某些段的一种相当快速和肮脏的解决方法,您可以使用您忽略的虚拟基本 uri(方案和主机)从相对 uri 构造一个临时绝对 uri。

String url = "/myFolder?bar=1#baz";
Uri uri = new Uri(url, UriKind.RelativeOrAbsolute);

if (!uri.IsAbsoluteUri)
{
Uri baseUri = new Uri("http://foo.com");
uri = new Uri(baseUri, uri);
}

String pathAndQuery = uri.PathAndQuery; // /myFolder?bar=1
String query = uri.Query; // ?bar=1
String fragment = uri.Fragment; // #baz

关于c# - 如何访问使用 UriKind.Relative 定义的 Uri 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52412954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com