我使用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中修复此问题?
答案 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" />
。我的锚元素也遇到了同样的问题。