我最近检测到,UrlHelper.IsLocalUrl
方法始终返回 false
,如果它在url
参数中检测到非ASCII字符。
示例:
var isLocal = UrlHelper.IsLocalUrl("контакты"); //false
这是一个错误,还是“按设计”?
答案 0 :(得分:16)
最新的可用实现是检查这些条件:
"/"
开头,后跟"/"
或"\"
"~"
开头,后跟"/"
因此,传递给此方法的所有网址都必须以"/"
或"~/"
开头。
此外,如果您想知道,它不会考虑当前主机并检查例如http
等方案。
<强>更新强>
以下是UrlHelper.IsLocalUrl
使用的实现的链接
http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/600963a4df15#src/System.Web.WebPages/RequestExtensions.cs
答案 1 :(得分:1)
可能是因为RFC中的URL是由US-ASCII代码集定义的,带有保留字符 您可以在此处阅读有关网址规范的信息:http://www.ietf.org/rfc/rfc1738.txt
以上网站/文件的引用:
只能使用图形的可打印字符编写URL US-ASCII编码字符集。八位字节80-FF十六进制不是 在US-ASCII中使用,八位字节00-1F和7F十六进制表示 控制字符;这些必须编码。
简而言之,我的猜测是“按设计”。
注意:RFC由IETF设置,它设置了一些技术的标准,例如URL。