【问题标题】:Get application root from Request object that works locally and remotely从本地和远程工作的请求对象获取应用程序根
【发布时间】:2011-07-15 10:35:09
【问题描述】:

假设我的 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);

我开始使用请求的权限属性是因为我在使用 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”之类的东西,但这很难看。那么如何构建一个在任何地方都可以使用的字符串呢?

【问题讨论】:

    标签: asp.net url request


    【解决方案1】:

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

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

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

    【讨论】:

    • 正是我想要的。谢谢!
    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2021-01-07
    • 2017-04-20
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多