在MVC4移动应用程序中将HTTP重定向到HTTPS

时间:2014-01-16 10:10:22

标签: asp.net-mvc-4

在我的MVC4移动应用程序中,我有注册,登录页面和剩余页面。我想将用户重定向到所有敏感信息页面的HTTPS连接,例如注册和登录页面以及HTTP到重新映射页面。

2 个答案:

答案 0 :(得分:0)

在您希望成为HTTPS的控制器操作中,将以下代码添加到方法的顶部(当然,您只需将其添加到自己的方法然后调用它):

        if (!HttpContext.Request.IsSecureConnection)
        {
            var url = new UriBuilder(HttpContext.Request.Url);

            url.Scheme = "https";

            Response.Redirect(url.Uri.AbsoluteUri);
        }

建议您在整个网站上保留HTTPS以防止MITM attack针对身份验证Cookie。

答案 1 :(得分:0)

我更喜欢你使用条件功能来放置类

public class RequireHttpsConditional : RequireHttpsAttribute
{
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
    {
        var useSslConfig = ConfigurationManager.AppSettings["UseSSL"];
        if (useSslConfig != null)
        {
            if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
            {
                throw new InvalidOperationException("The requested resource can only be accessed via SSL.");
            }

            var request = filterContext.HttpContext.Request;
            string url = null;
            int sslPort;

            if (Int32.TryParse(useSslConfig, out sslPort) && sslPort > 0)
            {
                url = "https://" + request.Url.Host + request.RawUrl;

                if (sslPort != 443)
                {
                    var builder = new UriBuilder(url) { Port = sslPort };
                    url = builder.Uri.ToString();
                }
            }

            if (sslPort != request.Url.Port)
            {
                filterContext.Result = new RedirectResult(url);
            }
        }
    }
}

并在操作结果上方使用此[RequireHttpsConditional]

我在互联网的某个地方有这个代码,对我来说工作正常。

web.config appsettings中的

使用<add key="UseSSL" value="443" />

并且在操作结果上方的控制器中需要输入

  [RequireHttpsConditional]
  public ActionResult SignIn()
 {
 }

在IIS中右键单击并单击“编辑绑定”,然后添加自定义类型https和端口号443(可以更改)

请注意,这仅适用于生产环境。在本地执行时它不会工作。

当您在本地执行时,您request.Url.Host只会返回localhost并错过您的端口号。因此,如果您在MVC中使用它,您将找到您放置此代码的页面的错误加载页面。

因此,当您分配主机而不是使用具有特定端口号的localhost时,这将起作用。