sel*_*ary 8 .net c# ajax uri hashbang
在以下测试中,为什么(仅)最后一个失败?
[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));
}
Run Code Online (Sandbox Code Playgroud)
如果在Absolute版本中Uri识别出HashbangsIsWellFormedUriString,为什么不在Relative版本中呢?我错过了什么?
注意:这没有用.
这不能按您的预期工作的原因是 hashbang 不是URI Scheme的一部分。该方法期望 URI 格式的分层部分,并且散列标记(以及随后的散列符号)不是从中确定相对和绝对路径的分层部分的成员。
< > 为必填部分
[ ] 为可选部分
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
作为绝对 URI 的示例;如果我没记错的话,查询将被忽略,其中包括片段和哈希标记
http://domain.com/path/to/something/?query=1#fragment
这里还为您提供了一些更多信息。这全部来自 MSDN 描述该Uri.IsWellFormedUriString()方法
通过尝试使用字符串构造 URI 来指示字符串是否格式良好,并确保字符串不需要进一步转义。
评论:
默认情况下,根据RFC 2396和RFC 2732 ,该字符串被视为格式良好。如果启用国际资源标识符 (IRI) 或国际化域名 (IDN) 解析,则根据RFC 3986和RFC 3987 ,该字符串将被视为格式良好。
如果出现以下任一情况,则认为该字符串格式不正确,导致该方法返回 false
以下是一些失败示例:
http://www.contoso.com/path???/文件名
字符串未正确转义。c:\directory\filename
该字符串是一个绝对 Uri,表示隐式文件 Uri。file://c:/directory/filename
该字符串是绝对 URI,路径前缺少斜杠。http:\host/path/file
该字符串包含未转义的反斜杠,即使它们将被视为正斜杠www.contoso.com/path/file
该字符串表示分层绝对 Uri,不包含“://”
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |