确定本地/登台/制作的URL的最佳方法是什么?

时间:2009-07-24 15:53:43

标签: asp.net

对于本地测试,网址如下: 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));

5 个答案:

答案 0 :(得分:1)

当路径开始在不同的环境之间发生分歧,并且你无法为这种情况带来任何理智时,是时候在web.config中启动puttin'路径了。

这不是解决不一致文件路径的方法,但它会使你的代码保持一致,你不必担心“让我们弄清楚我在哪里”逻辑。

答案 1 :(得分:0)

代字号是HttpRuntime.AppDomainAppVirtualPathmore

的快捷方式
~/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来跨所有实例同步设置(因此每个环境始终具有适用于所有环境的设置),并且有单元测试可确保每个环境都有一整套设置。

这是一种方法......到目前为止,它对我们来说非常有效。