强制HTTP而不是HTTPS

时间:2013-08-05 07:32:51

标签: asp.net-mvc ssl iis-7.5

我有一个在ASP.Net MVC4中编写并部署到IIS7.5的网站,用户首先需要在浏览其余网页之前登录,所以例如,这里的源代码如下:

路线:

localhost/project/account/logon
localhost/project/apple
localhost/project/banana

登录方法:

[RequireHttps]
public ActionResult Logon(string returnUrl)
{
    ...
    return View();
}


[HttpPost]
public ActionResult Logon(string user, string pwd, bool remember)
{
    ...
    string url = "/apple";
    return Redirect(url);
}

问题是,在用户登录后,我们将用户重定向到使用return Redirect('/apple')的其他链接时,它还会使用HTTPS https://localhost/project/apple访问新链接。

如何阻止重定向使用HTTPS?

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

[HttpPost]
public ActionResult Logon(string user, string pwd, bool remember)
{
    var url = Url.Action("someAction", "someController", null, "http");
    return Redirect(url);
}

但不要这样做。切勿在未加密的频道上传输会话cookie。一旦用户通过身份验证并向您发送了身份验证cookie,此用户在您网站上执行的所有操作都应通过SSL发送。我还建议您使用secure标记(web.config中的requireSSL="true")发出表单身份验证Cookie。

答案 1 :(得分:0)

您还可以查看IIS Url rewrite以将网址从https地址重定向到http地址。例如,此规则将所有https流量重定向到相应的http端点

<rewrite>
      <rules>
        <rule name="HTTPS to HTTP" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{SERVER_PORT}" pattern="^443$" />
          </conditions>
          <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" redirectType="Temporary" />
        </rule>
      </rules>
    </rewrite>