对于非ASCII字符串,UrlHelper.IsLocalUrl方法始终返回“false”

时间:2012-09-28 14:56:09

标签: asp.net-mvc

我最近检测到,UrlHelper.IsLocalUrl方法始终返回 false ,如果它在url参数中检测到非ASCII字符。

示例:

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

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

2 个答案:

答案 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。