我正在使用HTTPSMVC2,并有一个通过ASP.NET安全的登录页面。为了确保用户始终通过SSL访问这些页面,我向控制器添加了属性[RequireHttps]
。这完美地完成了这项工作。
当他们成功登录后,我想将他们重定向回HTTP版本。但是,没有[RequireHttp]
属性,我正在努力弄清楚如何实现这一点。
增加的(潜在)复杂性是,网站在生产时托管在域的路由上,但出于开发和测试目的,它位于子目录/虚拟目录/应用程序中。
我是不是想得太多了,有没有简单的解决方案呢?或者它有一点复杂?
发布于 2010-04-01 22:09:15
经过一番钻研,我走上了我自己的路线,因为似乎没有一个很好的内置解决方案来解决这个问题(正如前面提到的,有一个很好的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);
}
}
我现在可以将它添加到我的控制器方法中,它的行为(看起来)与预期的一样。如果我从HTTPS协议重定向到控制器上的Index操作,它将重定向到HTTP。它只允许通过超文本传输协议访问索引ActionResult。
[RequireHttp]
public ActionResult Index() {
return View();
}
https://stackoverflow.com/questions/2560615
复制相似问题