【发布时间】:2011-04-07 09:22:11
【问题描述】:
我希望我的登录页面仅是 SSL:
[RequireHttps]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
但是当我开发和调试我的应用程序时,显然它在 localhost 上不起作用。我不想使用带有 SSL 证书的 IIS 7,如何自动禁用 RequireHttps 属性?
更新
根据 StackOverflow 用户和 ASP.NET MVC 2 源代码提供的信息,我创建了以下解决问题的类。
public class RequireSSLAttribute : FilterAttribute, IAuthorizationFilter
{
public virtual void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.HttpContext.Request.IsSecureConnection)
{
HandleNonHttpsRequest(filterContext);
}
}
protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.Url.Host.Contains("localhost")) return;
if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("The requested resource can only be accessed via SSL");
}
string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectResult(url);
}
}
它是这样使用的:
[RequireSSL]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
【问题讨论】:
-
如果你在 Stack Overflow 上搜索“RequireHttps”,这个问题已经被问了好几次了,所以有很多关于解决方案的信息。这是一个很好的问题,但是我还没有使用过该属性,但我可以立即看到它是一个问题。
-
你是对的。问题已经解决,我用对我有帮助的课程更新了我的主要帖子。
标签: asp.net-mvc debugging iis ssl localhost