当 Uri TryCreate 工作正常时,使用 Uri IsWellFormedUriString 的用途是什么?

6

我正在使用代码:

Uri.TryCreate(sURL, UriKind.Absolute, out URI)

这很好用。

我需要调用Uri.IsWellFormedUriString(sURL, UriKind.Absolute)吗?我的意思是,当Uri.TryCreate完美运行时,Uri.IsWellFormedUriString有什么用呢?

1个回答

8

Uri.IsWellFormedUriString 调用 TryCreate 以及调用 Uri.IsWellFormedOriginalString,因此结果可能与仅调用 TryCreate 不同。

从 ILSpy 中得知。

public static bool IsWellFormedUriString(string uriString, UriKind uriKind)
{
    Uri uri;
    return Uri.TryCreate(uriString, uriKind, out uri) && uri.IsWellFormedOriginalString();
}

来自MSDN

[Uri.IsWellFormedOriginalString] 表示用于构造此 Uri 的字符串是否格式正确且不需要进一步转义。


两个问题:1. 有没有可能有任何字符串通过 Uri.TryCreate 而不是 Uri.IsWellFormedUriString?2. 你说“因此,你不需要额外的 out 变量”,但在所有三个 Uri.TryCreate 声明中,第三个变量“out Uri result”都是必需的。那么,我该怎么调用 Uri.TryCreate,而不需要它呢? - Computer User
我更新了我的回答。我查看了ILSpy中的IsWellFormedUriString,并显示它也调用了IsWellFormedOriginalString,而不仅仅是调用TryCreate。 - keyboardP
为什么我不能在相对 URI 中使用 IsWellFormedOriginalString? - mtkachenko
@Max - 我没有尝试过,但你确定你不能吗?从源代码来看,这似乎不应该是一个问题http://referencesource.microsoft.com/#System/net/System/UriExt.cs,fb5ba9a46b2384ae。你确定你正在测试一个有效的字符串(有效是指符合RFC 2396和RFC 2732的规定)https://msdn.microsoft.com/en-us/library/system.uri.iswellformedoriginalstring%28v=vs.110%29.aspx? - keyboardP
抱歉,它有效。我试图使用IsWellFormedUriString验证以哈希符号结尾的相对URI(/discussion/page.aspx?DiscussionID=13&PostID=1#post4)。它返回false。如何验证带有哈希符号的URI? - mtkachenko

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