ASP.NET MVC: Как автоматически отключить [RequireHttps] на локальном хосте?

Я хочу, чтобы моя страница входа была только SSL:

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

        return View();
    }

Но очевидно, что это не работает на localhost, когда я разрабатываю и отлаживаю свое приложение. Я не хочу использовать IIS 7 с сертификатами SSL, как я могу автоматически отключить атрибут 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();
}
28
задан Alex 2 September 2010 в 15:08
поделиться