如果URL包含片段,为什么Url.IsLocalUrl返回false?

时间:2011-12-26 07:22:06

标签: c# asp.net-mvc-3

我正在使用Url.IsLocalUrl检查传递给我的身份验证操作的返回网址是否为本地。只要URL中没有片段,它就可以正常工作。那是, /t/test-team-3/tasks/lists/15返回true,但/t/test-team-3/tasks#/lists/15返回false。

这背后的原因是什么?是否存在可能在片段中出现的一些模糊的安全问题,或者在我检查URL是否为本地时可以安全地忽略该片段吗?

1 个答案:

答案 0 :(得分:20)

此方法在内部调用Uri.IsWellFormedUriString方法。在包含片段的相对URL上调用此方法时,它返回false。 a bug on MS Connect设计原因而关闭。

在绝对URL(使用http / https等方案)上使用此方法时,该方法的行为与预期的一样。我认为原因是Uri类不仅适用于HTTP URL。如果未指定协议(相对URL),则使用不允许片段的通用URL解析器。

所以我猜你有两种可能性:

  • 在调用方法之前剥离片段
  • 在绝对URL(http://foo.com/t/test-team-3/tasks#/lists/15)上调用该方法,因为无论如何,如果您在相对URL上调用此方法,我们可以预期它是本地URL。