Request.Url.GetLeftPart(UriPartial.Authority)在https网站上返回http

kap*_*apz 14 c# https http httpcontext

我们Request.Url.GetLeftPart(UriPartial.Authority)用来获取网站的域名部分.这满足了我们对http的要求.我们最近将网站更改为https(大约3天前),但仍然会返回http:// ..网址已全部更改为https并显示在浏览器地址栏中.

知道为什么会这样吗?

Her*_*rdo 21

以下示例正常工作并返回带有"https"的字符串:

var uri = new Uri("https://www.google.com/?q=102njgn24gk24ng2k");
var authority = uri.GetLeftPart(UriPartial.Authority);
// authority => "https://www.google.com"
Run Code Online (Sandbox Code Playgroud)

您要么HttpContext在此处遇到问题,要么您的所有请求仍在使用http:

  1. 您可以查看requests HttpContext.Current.Request.IsSecureConnection属性.如果确实如此,并且该GetLeftPart方法仍然为您返回http,我认为您不会在这里替换它.
  2. 如果您的所有请求都是http,那么您可以在IIS中强制实施安全连接.

您还应检查传入的URL并将其记录在某处以进行调试.

  • 你的第二点是问题!他们在DNS级别绑定了SSL(我不知道这个).IIS只打开端口80,所以它仍然是http. (3认同)

Gre*_*reg 7

在处理负载均衡器时也可能会发生这种情况。在我研究过的一种情况下,任何 https 请求都会被负载均衡器转换为 http。它在浏览器地址栏中仍然显示 https,但在内部它是一个 http 请求,因此您所做的服务器端调用将GetLeftPart()返回 http。