C# 使用ASP.NET MVC应用程序从HTTPS重定向

C# 使用ASP.NET MVC应用程序从HTTPS重定向,c#,asp.net-mvc,https,C#,Asp.net Mvc,Https,我正在使用ASP.NET MVC 2,并且有一个通过HTTPS保护的登录页面。为了确保用户始终通过SSL访问这些页面,我将属性[RequireHttps]添加到控制器中。这项工作做得很好 当他们成功登录后,我想将他们重定向回HTTP版本。然而,这里没有[RequireHttp]属性,我正在努力思考如何实现这一点 增加的(潜在的)复杂性是,网站在生产时托管在域的路径上,但出于开发和测试目的,它位于子目录/虚拟目录/应用程序中 我是不是想得太多了,有没有一个简单的解决办法摆在我面前?还是更复杂一点?

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

当他们成功登录后,我想将他们重定向回HTTP版本。然而,这里没有
[RequireHttp]
属性,我正在努力思考如何实现这一点

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


我是不是想得太多了,有没有一个简单的解决办法摆在我面前?还是更复杂一点?

经过一番挖掘之后,我开始了自己的工作,因为似乎没有一个很好的内置解决方案(如前所述,MVC2应用程序有一个很好的解决方案,形式为)。受的启发,我提出了以下代码:

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);
    }
}
我现在可以将它添加到我的控制器方法中,它的行为(看起来)与预期的一样。如果我从HTTPS协议重定向到控制器上的索引操作,它将重定向到HTTP。它只允许HTTP访问索引ActionResult

[RequireHttp]
public ActionResult Index() {
    return View();
}
可能的重复不是重复(至少不是一个冈萨罗链接),因为我想走另一条路。从HTTPS到HTTP。除非有一个参数我在
[RequireHttps]
上找不到,否则这对我没有用处。