HttpContext.Current.Request.Url.Host返回什么?

48

我有一个本地应用程序,其路径为:

http://localhost:950/m/pages/Searchresults.aspx?search=knife&filter=kitchen

但是当这个东西进入集成环境或者生产环境时,它将会变成这样:

http://www.someshopping.com/m/pages/SearchResults.aspx?search=knife&filter=kitchen

有些情况下我只需要传递:

www.someshopping.com

到我的XSLT文件中,在其中一个函数中我正在使用以下代码:

string currentURL = HttpContext.Current.Request.Url.Host;

在本地环境中,这将返回给我localhost。同样的代码会在生产环境中返回给我:

www.someshopping.com(我不需要http://

我只是不想冒任何风险,所以问了这个愚蠢的问题。


3
也许应该是 string host = HttpContext.Current.Request.Url.Host; - Spike0xff
3个回答

58

是的,只要您在浏览器中输入的网址为www.someshopping.com并且您没有使用URL重写功能。

string currentURL = HttpContext.Current.Request.Url.Host;

将返回 www.someshopping.com

请注意本地调试环境和生产环境之间的区别。


1
如果请求头中存在'HOSTNAME',则返回该值,否则返回本地地址。详情请参见以下来源:https://referencesource.microsoft.com/#System.Web/HttpRequest.cs,36cdd1ccad69cf75 - Alex

20
Host 属性将返回您访问站点时使用的域名。因此,在您的开发环境中,由于您正在请求
http://localhost:950/m/pages/Searchresults.aspx?search=knife&filter=kitchen

它正在返回localhost。 您可以像这样拆开您的URL:

Protocol: http
Host: localhost
Port: 950
PathAndQuery: /m/pages/SearchResults.aspx?search=knight&filter=kitchen

那么我的问题是,这将在生产环境中返回www.someshopping.com吗? :) - Amin Sayed
是的,假设您在生产中请求的URL是www.someshopping.com,它会起作用。 - Tejs

10

试试这个:

string callbackurl = Request.Url.Host != "localhost" 
    ? Request.Url.Host : Request.Url.Authority;

这将适用于本地和生产环境,因为本地使用带有端口号的URL,可以使用Url.Host实现。


15
你应该始终使用 Request.IsLocal 来检查是否为本地请求,不需要比较 Request.Url.Host,因为如果我实际写成 http://LocalHost/...,那么它是错误的。 - balexandre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接