在以下测试中,为什么(仅)最后一个失败?
[Fact]
public void IsWellFormedUriString_AbsolutNonHashTagUri_ReturnsTrue()
{
Assert.True(Uri.IsWellFormedUriString("http://www.RegularSite.org/Home", UriKind.Absolute));
}
[Fact]
public void IsWellFormedUriString_RelativeNonHashTagUri_ReturnsTrue()
{
Assert.True(Uri.IsWellFormedUriString("Home", UriKind.Relative));
}
[Fact]
public void IsWellFormedUriString_AbsolutHashTagUri_ReturnsTrue()
{
Assert.True(Uri.IsWellFormedUriString("http://www.w3.org/#!Home", UriKind.Absolute));
}
[Fact]
public void IsWellFormedUriString_RelativeHashTagUri_ReturnsTrue()
{
// Fails!
Assert.True(Uri.IsWellFormedUriString("#!Home", UriKind.Relative));
}
如果Uri
在IsWellFormedUriString
的绝对版本中识别Hashbangs,为什么不在相对版本中?我错过了什么?
注意:This无效。
答案 0 :(得分:3)
这不符合你的预期是因为hashbang不是URI Scheme的一部分。该方法期望URI格式的分层部分和哈希标记(以及随后的哈希棒)不是确定相对和绝对路径的分层部分的成员。
< >是必需的部分
[]是可选部分
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
作为绝对URI的示例;查询,如果我没有弄错,将被忽略,其中包括片段和哈希标记
http://domain.com/path/to/something/?query=1#fragment
以下是您的更多信息。这些都来自描述Uri.IsWellFormedUriString()
方法的MSDN
通过尝试使用。构造URI来指示字符串是否格式正确 string并确保字符串不需要进一步转义。
说明:
默认情况下,根据RFC 2396和RFC 2732,字符串被视为格式正确。如果启用了国际资源标识符(IRI)或国际化域名(IDN)解析,则根据RFC 3986和RFC 3987将字符串视为格式良好。
如果出现以下任何一种情况,该字符串被认为格式不正确,导致该方法返回false
以下是一些失败的例子:
http://www.contoso.com/path???/file姓名
该字符串未正确转义。C:\目录\文件名
字符串是绝对的Uri,表示隐式文件Uri。文件:// C:/目录/文件名
字符串是绝对URI,在路径之前缺少斜杠。的http:\主机/路径/文件
该字符串包含未转义的反斜杠,即使它们将被视为正斜杠www.contoso.com/path/file
字符串表示分层绝对Uri,不包含“://”