asp.net-mvc - ASP.NET MVC : How to automatically disable [RequireHttps] on localhost?

标签 asp.net-mvc debugging iis ssl localhost

我希望我的登录页面仅使用 SSL:

    [RequireHttps]
    public ActionResult Login()
    {
        if (Helper.LoggedIn)
        {
            Response.Redirect("/account/stats");
        }

        return View();
    }

但很明显,当我开发和调试我的应用程序时,它在本地主机上不起作用。我不想使用带 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();
}

最佳答案

最简单的方法是从 RequireHttps 派生一个新属性并覆盖 HandleNonHttpsRequest

protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
        {
            if (!filterContext.HttpContext.Request.Url.Host.Contains("localhost"))
            {
                base.HandleNonHttpsRequest(filterContext);
            }
        }

HandleNonHttpsRequest 是抛出异常的方法,这里我们所做的只是在主机是本地主机时不调用它(正如 Jeff 在他的评论中所说,您可以将其扩展到测试环境或实际上您想要的任何其他异常).

关于asp.net-mvc - ASP.NET MVC : How to automatically disable [RequireHttps] on localhost?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628181/

相关文章:

jquery - 使用ajax调用设置 session 变量并刷新部分

c# - 使用MySQL身份提供程序的Web API 2.0,AuthContext?

IIS下Python FastCGI - stdout写入问题

c# - 使用复合主键在 DbSet 中查找元素

asp.net-mvc - 在ASP.NET MVC WebMatrix中忘记密码+电子邮件确认

php - Magento:如何在我的 Magento 扩展程序中包含 “debug flag”?

windows - 64 位操作系统 (windows) 上的 32 位应用程序

.net - Mono for ASP.NET 对于实际应用程序来说是否足够成熟?

ruby - 我如何在 Emacs 中使用 ruby​​-debug?

c++ - 如何检查 C++ 中的位?