首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC4移动应用中将HTTP重定向到HTTPS

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

Stack Overflow用户
提问于 2014-01-16 10:10:21
回答 2查看 523关注 0票数 0

在我的MVC4移动应用程序中,我有注册、登录页面和其他页面。我想将所有敏感信息页面的用户重定向到HTTPS连接,如注册和登录页面,HTTP重定向页面。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-25 06:42:49

我更希望您使用条件功能--将类放到

代码语言:javascript
复制
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应用程序设置中使用<add key="UseSSL" value="443" />

在上述操作结果的控制器中,需要将

代码语言:javascript
复制
  [RequireHttpsConditional]
  public ActionResult SignIn()
 {
 }

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

注意,这只在生产环境中起作用。当在本地执行时,它将无法工作。

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

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

票数 0
EN

Stack Overflow用户

发布于 2014-01-16 10:41:02

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

代码语言:javascript
复制
        if (!HttpContext.Request.IsSecureConnection)
        {
            var url = new UriBuilder(HttpContext.Request.Url);

            url.Scheme = "https";

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

不过,建议您在整个站点上保持HTTPS,以防止MITM攻击对auth的攻击。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21158800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档