IIS 7.5层次结构中断应用程序路径

时间:2012-10-02 15:40:31

标签: asp.net-mvc-3 iis-7.5

我使用IIS.Net - Understanding Site, Applications and Virtual Directories

中的信息在网站下设置了一个网络应用程序

以下是他们对申请的看法。

  

应用程序是一组文件,通过协议(如HTTP)提供内容或提供服务。在IIS中创建应用程序时,应用程序的路径将成为站点URL的一部分。

那很好;正是我想要的;但是...应用程序路径无法正确解析脚本文件,css和我在应用程序中的Web服务。

http://site_name/application_name

<img src="/Content/images/smiley.png" alt="smiley face" /></a>

解析为

src="/site_name/Content/images/smiley.png"

而不是

src="/application_name/Content/images/smiley.png"

作为一种解决方法,我用@Url.Content()助手包装了我正在使用的路径。不是最漂亮的解决方案,但它正在发挥作用。

<img src="@Url.Content("~/Content/images/smiley.png")" alt="smiley face" /></a>

有没有办法在IIS中修复此问题?

3 个答案:

答案 0 :(得分:1)

这不是IIS问题,这是您在模板方面必须做的事情。现在,我不确定,但是在asp.net mvc4 / razor 2中可能会有一些额外的魔法可以让你代替

<img src="@Url.Content("~/Content/images/smiley.png")" alt="smiley face" />

DO

<img src="~/Content/images/smiley.png" alt="smiley face" />

并且所有内容都会自动转换为正确的路径。实际上this blog post似乎记录了这种能力。

但是除此之外,<img src="/path/to/image.png" alt="smiley face" />始终会引用http(s)://(current server)/path/to/image.png,除非在浏览器中看到html之前重写

答案 1 :(得分:0)

使用@Url.Content是IMO的正确方法。然后,无论开发人员如何在他们的计算机上设置(运行开发服务器或使用IIS),它都会使链接工作。

我不确定是否有办法在IIS中处理它,可能是URL重写规则,但它无助于开发机器之间的一致性。

编辑:您可以将站点部署到IIS中的站点根目录,而不是虚拟目录,但如果您只是要托管此单个站点,那么这只是一个很好的解决方案。

答案 2 :(得分:0)

添加此&#34; base&#34;标记在你的&#34; head&#34;部分:<base href="~/" target="_blank" />。我的锚元素也遇到了同样的问题。