为什么没有Request.Url.Scheme返回HTTPS?

时间:2014-09-04 14:20:05

标签: c# asp.net-mvc ssl https

我正在使用本地服务器,我需要通过HTTPS访问特定的URL,而其余的则通过HTTP访问。我已将Visual Studio配置为使用IIS Express,因此我可以使用HTTP / SSL。

我有一个像这样的方法:

[RequireHttps]
public ActionResult SomeHttpsMethod()
{
     //Do something
}

在另一个地方我有:

var url = Url.Action("SomeHttpsMethod", "SomeHttpsController", new { someParams }, Request.Url.Scheme);

如果我使用HTTPhttp://localhost:httpport访问我的网站,我仍然会从HTTP而不是Request.Url.Scheme返回HTTPS。它是如何工作的?

显然,如果我使用HTTPS访问我的网站,即以https://localhost:sslport开头,则返回HTTPS(这是我想要的)但我不想访问HTTPS中的网站,仅适用于特定的网址/控制器方法。

2 个答案:

答案 0 :(得分:5)

这一行:

var url = Url.Action("SomeHttpsMethod", "SomeHttpsController", 
    new { someParams }, Request.Url.Scheme);

根据您的当前请求的方案构建URL,即HTTP。 Request始终引用当前请求。

你最好不要硬编码" https"在这个地方,因为你总是希望它是安全的:

var url = Url.Action("SomeHttpsMethod", "SomeHttpsController", 
    new { someParams }, "https");

答案 1 :(得分:0)

在我的情况下,严重的是在ARR服务器上设置了规则。如果您获得HTTP而不是HTTPS,那么只需要看一下。