使用ASP.NET MVC App重定向HTTPS

Ama*_*ere 17 c# asp.net-mvc https

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

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

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

我是否过度思考这个问题并且有一个简单的解决方案让我盯着我?还是有点复杂?

Ama*_*ere 26

经过一番挖掘后,我沿着自己的路线前进,因为似乎没有一个好的内置解决方案(如上所述,以[RequireHttps]的形式有一个很棒的MVC2应用程序)).受çağdaş解决这个问题的启发,我适应了以下代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

[RequireHttp]
public ActionResult Index() {
    return View();
}
Run Code Online (Sandbox Code Playgroud)