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

s.e*_*ich 3 asp.net-mvc

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

例:

var isLocal = UrlHelper.IsLocalUrl("????????"); //false
Run Code Online (Sandbox Code Playgroud)

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

Séb*_*SFT 16

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

  • url以&开头,"/"后面没有"/"或"\"
  • 或者url以&开头,"~"然后是"/"

因此,传递给此方法的所有URL必须以"/"或开头"~/".

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

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

  • 对于那些感兴趣的人:自从MVC 3以来,行为已经发生了变化.在MVC 3中,当前的主机已经到位,现在它已经不存在了,不幸的是.这是一个突破性的变化. (2认同)