ASP.NET MVC - RequireHttps - укажите URL-адрес перенаправления - PullRequest
2 голосов
/ 12 мая 2011

Я использую [RequireHttps] в своем приложении MVC2, но на моей машине для тестирования URL-адрес SSL отличается от фактического URL-адреса сайта (это общая среда SSL).

Пример: URL-адрес моего сайтаhttp://my -domain.com и URL-адрес SSL: https://my -domain.sharedssl.com .

Есть ли способ сообщить MVC о перенаправлении наэтот URL, когда для контроллера / действия требуется HTTPS (предпочтительно в файле Web.config)?

Спасибо.

1 Ответ

2 голосов
/ 12 мая 2011

Нет способа использовать встроенный класс RequireHttpsAttribute, но написание собственных атрибутов фильтра MVC очень просто.Нечто подобное (основанное на классе RequireHttpsAttribute) должно работать:

public class RedirectToHttpsAttribute : FilterAttribute, IAuthorizationFilter 
{
    protected string Host
    {
        get;
        set;
    }

    public RedirectToHttpsAttribute ( string host ) 
    {
        this.Host = host;
    }

    public virtual void OnAuthorization(AuthorizationContext filterContext) 
    {
        if (filterContext == null) {
            throw new ArgumentNullException("filterContext");
        }

        if (!filterContext.HttpContext.Request.IsSecureConnection) {
            HandleHttpsRedirect(filterContext);
        }
    }

    protected virtual void HandleHttpsRedirect(AuthorizationContext context) 
    {
        if ( context.HttpContext.Request.HttpMethod != "GET" ) 
        {
            throw new InvalidOperationException("Can only redirect GET");
        }

        string url = "https://" + this.Host + context.HttpContext.Request.RawUrl;
        context.Result = new RedirectResult(url);
    }
}

РЕДАКТИРОВАТЬ:

Я точно не знаю, можно ли прочитать из web.config в FilterAttribute,но я не могу придумать причину, почему бы и нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...