非 80 端口映射到 80 时,.NET 如何获取浏览器中的网址?

作者:vkvi 来源:ITPOW(原创) 日期:2021-8-5

如果没有映射,即 80 对 80。

  • 那么浏览器输入:http://www.itpow.com/

  • 服务器端 .NET 中 Request.Url 也是:http://www.itpow.com/

但是如果有映射,比如 12345 端口对服务器 80 端口。

  • 那么浏览器输入 http://www.itpow.com:12345/

  • 服务器端 .NET 中 Request.Url 是:http://www.itpow.com/

如何获得浏览器中的 URL 呢?

使用 Request.Headers["host"]

  • 如果是默认端口,其返回 www.itpow.com

  • 如果非默认端口,其返回 www.itpow.com:12345

于是,我们要构造浏览器中输入的 URL,则如下:

Uri uri = HttpContext.Current.Request.Url;
string host = HttpContext.Current.Request.Headers["host"];
string url = uri.Scheme +
	"://" +
	host +
	uri.PathAndQuery;

再写复杂点,不知道是否有意义:

Uri uri = HttpContext.Current.Request.Url;
string url = uri.ToString(); // 默认就是来自 Request.Url。

string authority = uri.Authority;
string host = HttpContext.Current.Request.Headers["host"];
if (!string.IsNullOrEmpty(host) && string.Compare(authority, host, true) != 0)
{
	// 不相等,可能有内外端口不一致,重新构造 url。
	url = uri.Scheme +
		"://" +
		host +
		uri.PathAndQuery;
}

return url;

相关阅读

相关文章