从本地和远程工作的Request对象获取应用程序根目录

时间:2011-03-15 00:27:44

标签: asp.net url request

假设我将ASP.NET Web应用程序放在本地和远程服务器上名为“MyApp”的目录中。我正在尝试为链接构建onclick响应。响应调用Javascript函数,在我的Web应用程序中传递.aspx页面的URL。 Javascript会弹出一个显示页面的新窗口。我的C#代码如下所示:

link = new HyperLink();
link.Text = product_num_str;
link.NavigateUrl = "#";

string url = "Javascript:My_NewWindow('http://" + 
             HttpContext.Current.Request.Url.Authority +
             "/ProductInfo.aspx?_num=" + product_num_str + "')";

link.Attributes.Add("onclick", url);

我开始使用Request的权限属性,因为当我使用Host属性时,我在Visual Studio Web服务器上本地运行时遇到问题。问题是Host只返回“localhost”而不是主机和端口号。

在本地测试时,代码有效,因为“权限”映射到我的应用程序根文件夹。生成的URL是,例如,

http://localhost:52071/ProductInfo.aspx?_num=123

但是,如果我在远程服务器上运行,我最终会得到类似的结果:

http://company-server/ProductInfo.aspx?_num=123

无法找到该页面,因为在这种情况下必须包含“MyApp”根文件夹。

可能有一种更简单的方法 - 在web.config中添加一个条目。我最初的动机是允许将应用程序发布到任何名称的文件夹并按原样工作。

我可以破解我的方法并在字符串中搜索“localhost”或其他东西,但那很难看。那么如何构建一个可以在任何地方工作的字符串呢?

1 个答案:

答案 0 :(得分:2)

我假设您是在页面或控件中执行此操作。如果是这种情况,你应该这样做:

string fullUrl = this.ResolveClientUrl("~/ProductInfo.aspx?_num=" + product_num_str + ");

无论在何处部署应用程序,都会为您提供正确的URL。