何时/为什么应该使用C#的“WebPageExecutingBase.Href()”方法?

4

我试图通过谷歌和Stack Exchange寻找有关此问题的答案,虽然它确实提供了一些关于Href()方法的文档(我以前也看到过),但似乎关于这个方法的问题要么非常难找,要么就是不存在。我仍然困惑于为什么/何时真正使用它。

MSDN文档: http://msdn.microsoft.com/en-us/library/system.web.webpages.webpageexecutingbase.href(v=vs.111).aspx

从这份文档中,我可以看出它会从相对路径生成绝对URL。

我的问题是:

  1. 为什么需要这样做?
  2. 相对路径在测试环境外和Web服务器上都应该可以正常工作,不需要用Href()方法,是吗?
  3. 是否应该将站点中的每一个相对路径都更改为包含Href()方法? (例如:将Context.RedirectLocal("~/")更改为Context.RedirectLocal(Href("~/")))
  4. 在考虑ASP.NET Web页面环境下使用此方法时,最佳实践是什么?

很抱歉我如此困惑于这个看起来很简单的事情,但我不想发现我的网站已经上线却出现问题或安全漏洞(第一印象是致命的)。

1个回答

3
如果您正在使用Web Pages 1并希望确保虚拟路径始终正确映射到绝对URL,则需要明确使用此方法。从Web Pages 2开始,如果解析器遇到cshtml文件中的url中的波浪线(~),则框架会调用Href方法。
<script type="text/javascript" src="~/Scripts/jquery.js"></script>

当你的网站根路径结构变化,例如更改主机时,可能会出现路径无法正确解析而不使用显式或波浪线Href方法。 如果您的内部文件夹结构发生更改,或者移动文件,则也可能无法正常工作。 如果这种情况不太可能发生,那么您可能不需要担心使用该方法。在Href方法被波浪线取代之前,我没有倾向于使用它。现在,我总是使用它,因为它使用起来要容易得多,而且我宁愿每个URL添加一个额外的按键,也不想在以后遗憾。

您可以在此页面的中间找到更多关于Href的信息:http://www.asp.net/web-pages/tutorials/basics/2-introduction-to-asp-net-web-programming-using-the-razor-syntax


太棒了,Mike,非常感谢!我想我开始理解了。对于我的环境:如果是服务端代码,我一直使用波浪号,然而,如果是(至少看起来像)HTML(或JavaScript/jQuery),我只使用斜杠(不使用波浪线)。例如,在你以上的例子中,即使它在一个.cshtml文件中,我也不会使用波浪线,除非它出现在C#函数内部。既然它在一个.cshtml文件中,我可以从你的示例中看到包含它们可能是有益的。这是你推荐的吗? - VoidKing
就像我所说的,这是我的工作。所以我想我推荐它。 - Mike Brind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接