如果没有映射,即 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;
继续
使用了映射的话,这里还不能获得映射前的 URL,请继续阅读“相关阅读”。
相关阅读