我最近检测到,如果在参数中检测到非 ASCII 字符,该UrlHelper.IsLocalUrl
方法总是返回。false
url
例子:
var isLocal = UrlHelper.IsLocalUrl("контакты"); //false
这是一个错误,还是“设计使然”?
我最近检测到,如果在参数中检测到非 ASCII 字符,该UrlHelper.IsLocalUrl
方法总是返回。false
url
例子:
var isLocal = UrlHelper.IsLocalUrl("контакты"); //false
这是一个错误,还是“设计使然”?
最新可用的实现是检查这些条件:
"/"
后面不跟"/"
or"\"
"~"
并且后跟"/"
因此,传递给此方法的所有 url 必须以"/"
or开头"~/"
。
此外,如果您想知道,它不会考虑当前主机并检查诸如此类http
的方案。
更新:
这是UrlHelper.IsLocalUrl
http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/600963a4df15#src/System.Web.WebPages/RequestExtensions.cs使用的实现的链接
可能是因为 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。