【问题标题】:Application-Relative URLs应用程序相关 URL
【发布时间】:2011-04-01 15:18:56
【问题描述】:

我刚刚在 VS2010 中创建了一个新的 ASP.NET Web 应用程序,并将其设置为 IIS7 中的应用程序。

不确定这是否相关,但代码实际位于 \myserver\projects\epeui\epe 文件夹中(项目文件夹是我的默认网站的根目录)。该应用程序挂断了这台机器的默认网站的根目录:http://myserver/epe/。并在 IIS 中配置为应用程序。

通常,我使用相对于应用程序根目录的 URL,因此我的 CSS 文件位于 /styles/ 中,我的图像位于 /images/ 中,而我的 JavaScript 文件位于 /scripts/ 中。

鉴于应用程序在 IIS 中如此配置,要访问我的徽标,我希望使用 /images/mylogo.png,一个应用程序相对 URL。

但是,这不适用于本网站;相反,我需要使用父路径 (../images/mylogo.png) 或相对于默认网站 (/epe/images/mylogo.png) 的 URL。出于便携性的原因,这些都不是很好。

我还尝试使用波浪号来使用据称相对于虚拟路径(即应用程序根目录)的 URL = ~/images/mylogo.png

我发誓我之前已经做过一千次了,但显然在某个地方搞砸了......有什么建议吗?

至少有人可以确认,对于 IIS 中的标准应用程序,/mypage.html 应该引用 http://myserver/myapp/mypage.html 而不是 http://myserver/mypage.html

【问题讨论】:

    标签: asp.net iis url iis-7 relative-path


    【解决方案1】:

    /mypage.html 将映射到根http://myserver/mypage.html,这是正确的行为

    服务器端控件上的 ~ 将映射到应用程序根目录(因此 <asp:HyperLink NavigateUrl="~/mypage.html"...> 将映射到 http://myserver/myapp/mypage.html

    过去,我曾使用过<%= Request.ApplicationPath %>/myPage.html,尤其是对于 css 和 javascript 文件。有时最好将其定义为 global.asax.cs 中的全局变量,这样您就可以在所有地方使用它。您实例中的 Request.ApplicationPath 将是“/myapp”

    我也为此苦苦挣扎。

    【讨论】:

    • <a href=~/mypage.html runat=server> 也可以工作(因为 runat=server,asp.net 会处理标签和 url)。
    • 除非我失去理智(很有可能!),否则我可以发誓过去 10 年我一直在开发各种 IIS 版本上的 ASP Classic 应用程序,其中“/”指的是应用程序的根目录而不是站点。我最初经常忘记将文件夹设置为 IIS 中的应用程序,因此这些相对路径不起作用。过去几年我所做的一切都对这个问题“免疫”,所以我现在不确定是否发生了变化,或者我是否真的精神错乱! :(
    • 我遇到了同样的问题。我有一个网络应用程序和一个网站。我将 Web 应用程序设置为在 vs 中使用 IIS 进行调试。它在默认网站下添加了一个应用程序,看起来我的所有 URL 都正确加载。然而,在网站上,它们不是。它们是相对于父网站的。烦人!
    • 这是因为普通的 html 文件通常不被服务器处理。应用程序相关 URL 是 服务器端 功能。只要您不使用服务器端代码,那么以 / 开头的 URL 就会引用您服务器的根目录。
    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多