3

我最近检测到,如果在参数中检测到非 ASCII 字符,该UrlHelper.IsLocalUrl方法总是返回。falseurl

例子:

var isLocal = UrlHelper.IsLocalUrl("контакты"); //false

这是一个错误,还是“设计使然”?

4

2 回答 2

16

最新可用的实现是检查这些条件:

  • url 以 or 开头,"/"后面不跟"/"or"\"
  • 或者 url 以开头"~"并且后跟"/"

因此,传递给此方法的所有 url 必须以"/"or开头"~/"

此外,如果您想知道,它不会考虑当前主机并检查诸如此类http的方案。

更新: 这是UrlHelper.IsLocalUrl http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/600963a4df15#src/System.Web.WebPages/RequestExtensions.cs使用的实现的链接

于 2012-10-05T21:15:45.623 回答
1

可能是因为 RFC 中的 URL 是由 US-ASCII 代码集定义的,带有保留字符。
您可以在此处阅读有关 URL 规范的信息:http ://www.ietf.org/rfc/rfc1738.txt

以及来自上述网站/文件的报价:

URL 仅使用 US-ASCII 编码字符集的图形可打印字符编写。US-ASCII 中不使用八位字节 80-FF 十六进制,八位字节 00-1F 和 7F 十六进制表示控制字符;这些必须被编码。

简而言之,我的猜测是“设计使然”。

注意:RFC 是由 IETF 制定的,它制定了一些技术的标准,例如 URL。

于 2012-09-28T16:15:12.097 回答