对于本地测试,网址如下: http://localhost:29234/default.aspx
对于暂存,应用程序位于虚拟目录中: http://stage/OurApp/default.aspx
对于生产来说,它是根源 http://www.ourcompany.com/default.aspx
但是,有时我们需要重定向到特定目录。我们并不总是确切地知道我们在哪里。
那么,我怎么做重定向来说/subdir1/mypage.aspx?
更多信息
我忽略了一个重要的项目。此URL将被发送回浏览器,以便某些JavaScript代码可以执行重定向。 (奇怪,我知道)。所以常规的ResolveUrl(“〜/ pagename.aspx”)不会提供完整的信息......
更新2 我最终得到了以下内容,这似乎全面运作......虽然看起来有点难看。
StringBuilder buildUrl = new StringBuilder(@"http://");
buildUrl.Append(Request.Url.Host);
if (Request.Url.Port != 80) {
buildUrl.Append(":");
buildUrl.Append(Request.Url.Port.ToString());
}
buildUrl.Append(this.ResolveUrl("~/Pages/Customers.aspx"));
buildUrl.Append(String.Format("?AccountId={0}&tabName=Tab2&primaryCustomerId={1}", acctId, custId));
答案 0 :(得分:1)
当路径开始在不同的环境之间发生分歧,并且你无法为这种情况带来任何理智时,是时候在web.config中启动puttin'路径了。
这不是解决不一致文件路径的方法,但它会使你的代码保持一致,你不必担心“让我们弄清楚我在哪里”逻辑。
答案 1 :(得分:0)
代字号是HttpRuntime.AppDomainAppVirtualPath(more)
的快捷方式~/subdir1/mypage.aspx
答案 2 :(得分:0)
如果subdir1是Web应用程序中的目录,则可以使用相对链接(subdir1 / mypage.aspx而不是/subdir/mypage.aspx - 请注意缺少第一个正斜杠)。这样,应用程序的位置无关紧要,因为链接将相对于当前页面。
答案 3 :(得分:0)
建议您可以使用BASE标记作为根目录的页面。通过使用它,所有相对路径将基于BASE路径解析。
答案 4 :(得分:0)
一般建议
我建议在您的设置中存储路径。我们的一些项目需要各种路径和网址是有原因的,我们不能总是使用波浪号(〜)。
我们的策略
在Inntec的项目中,我们的web.config包含一个数据库连接字符串和一个变量,说明环境是什么 - 生产,登台,开发等。
然后,在数据库中,我们为每个环境提供了一组变量,并且有一个很好的类可以强类型化设置并为当前环境提取/缓存正确的设置。所以在我们的代码中我们可以说:Settings.AppUrl,一切正常。
我们使用Redgate的Sql Data Compare来跨所有实例同步设置(因此每个环境始终具有适用于所有环境的设置),并且有单元测试可确保每个环境都有一整套设置。
这是一种方法......到目前为止,它对我们来说非常有效。