【问题标题】:Redirect away from HTTPS with ASP.NET MVC App使用 ASP.NET MVC 应用程序从 HTTPS 重定向
【发布时间】:2010-04-01 13:21:56
【问题描述】:

我正在使用 ASP.NET MVC 2 并且有一个通过 HTTPS 保护的登录页面。为了确保用户始终通过 SSL 访问这些页面,我已将属性 [RequireHttps] 添加到控制器中。这完美地完成了这项工作。

当他们成功登录后,我想将他们重定向回 HTTP 版本。但是,没有[RequireHttp] 属性,我正在努力弄清楚如何实现这一目标。

增加的(潜在的)复杂性是网站在生产时托管在域的路由上,但出于开发和测试目的,它位于子目录/虚拟目录/应用程序中。

我是不是想多了?有没有一个简单的解决方案让我眼前一亮?还是稍微复杂一点?

【问题讨论】:

  • 这不是重复的(至少不是 Gonzalo 链接的那个),因为我想以另一种方式旅行。 HTTPS HTTP。除非有我在[RequireHttps] 上找不到的参数,否则那对我没有用处。

标签: c# asp.net-mvc https


【解决方案1】:

经过一番挖掘,我开始自己动手,因为似乎没有一个好的内置解决方案(如前所述,MVC2 应用程序有一个很棒的解决方案,形式为[RequireHttps])。受到çağdaşthis problem 的解决方案的启发,我适应了以下代码:

public class RequireHttp : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // If the request has arrived via HTTPS...
        if (filterContext.HttpContext.Request.IsSecureConnection)
        {
            filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.Url.ToString().Replace("https:", "http:")); // Go on, bugger off "s"!
            filterContext.Result.ExecuteResult(filterContext);
        }
        base.OnActionExecuting(filterContext);
    }
}

我现在可以将它添加到我的 Controller 方法中,并且它的行为(似乎)符合预期。如果我从 HTTPS 协议重定向到控制器上的 Index 操作,它将重定向到 HTTP。它只允许 HTTP 访问 Index ActionResult。

[RequireHttp]
public ActionResult Index() {
    return View();
}

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 2018-02-06
    • 2020-01-24
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多