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

发布于 2024-10-21 20:03:40 字数 1024 浏览 2 评论 0原文

假设我的 ASP.NET Web 应用程序位于本地和远程服务器上名为“MyApp”的目录中。我正在尝试构建对链接的点击响应。该响应调用 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);

我开始使用请求的 Authority 属性,因为当我使用 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”或其他内容,但这很丑陋。那么如何构建一个可以在任何地方使用的字符串呢?

Let's say that I have my ASP.NET web application in a directory called "MyApp" both locally and on a remote server. I'm trying to build an onclick response to a link. The response calls a Javascript function, passing it the URL of an .aspx page in my web app. The Javascript pops out a new window displaying the page. My C# code looks like this:

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);

I started using the Request's Authority property because I was having problems running locally on the Visual Studio web server when I used the Host property. The problem was that Host only returned "localhost" instead of the host and port number.

When tested locally, the code works because the "authority" maps to my app root folder. The URL generated is, e.g.,

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

If I run on a remote server, however, I end up with something like:

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

This fails to find the page, because in this case the "MyApp" root folder must be included.

There is probably an easier way - putting an entry in the web.config or something. My motivation originally was to allow the app to be published to a folder of any name and work as is.

I could hack my approach and search the string for "localhost" or something, but that's ugly. So how do I build a string that will work everywhere?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

所有深爱都是秘密 2024-10-28 20:03:40

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

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

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

I'm assuming you're doing this from within a Page or Control. If that's the case you should do this instead:

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

That will give you the proper URL no matter where the application is deployed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文