gpt4 book ai didi

c# - Uri.IsWellFormedUriString 需要更新吗?

转载 作者:太空狗 更新时间:2023-10-29 21:06:38 25 4
gpt4 key购买 nike

我想我可能发现了 Uri.IsWellFormedUriString 方法中的错误,可能是因为它只符合 RFC 2396RFC 2732标准而不是更新的RFC 3986这使得前面提到的两个已经过时了。

我认为发生的情况是任何非 us-ascii 字符都会使其失败,因此其中包含 æ、ø、ö 或 å 等字符的 url 将使其返回 false。由于现在允许使用这些字符(wikipedia 等使用它们),我认为 Uri.IsWellFormedUriString 应该接受它们。下面的正则表达式取自 RFC 3986。

你怎么看? Uri 类是否应该更新?

无论如何,这里有一些显示错误的示例代码:

static void Main(string[] args)
{
var urls = new []
{
@"/aaa/bbb/cccd",
@"/aaa/bbb/cccæ",
@"/aaa/bbb/cccø",
@"/aaa/bbb/cccå"
};

var regex = new Regex(@"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?");

Debug.WriteLine("");

foreach (var url in urls)
{
if (Uri.IsWellFormedUriString(url, UriKind.Relative))
Debug.WriteLine(url + " is a wellformed Uri");

if (regex.IsMatch(url))
Debug.WriteLine(url + " passed the Regex");

Debug.WriteLine("");
}
}

输出:

/aaa/bbb/cccd is a wellformed Uri
/aaa/bbb/cccd passed the Regex

/aaa/bbb/cccæ passed the Regex

/aaa/bbb/cccø passed the Regex

/aaa/bbb/cccå passed the Regex

最佳答案

您必须更改配置以支持 RFC 3986 和 RFC 3987。这是您必须进行的配置:

<configuration>
<uri>
<idn enabled="All" />
<iriParsing enabled="true" />
</uri>
</configuration>

取自此处http://msdn.microsoft.com/en-us/library/system.uri.aspx#CodeSnippetContainerCode5

关于c# - Uri.IsWellFormedUriString 需要更新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107621/

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