Всегда нужен HTTPS для определенного маршрута, а не для всего сайта

Я хочу использовать https для одной страницы, а не для всего сайта. Мое приложение находится в MVC3. Я использовал приведенный ниже код для этого.

[RequireHttps]
public ViewResult YourAction()

Но после перехода к моему конкретному действию весь сайт работает под https. Я хочу использовать https для одной страницы, а не для всего сайта.


person Jitendra Pancholi    schedule 22.06.2012    source источник
comment
stackoverflow.com/questions/7846833/   -  person Chuck Norris    schedule 22.06.2012
comment
Я не получил правильного ответа. В примере, взятом по ссылке, я должен писать этот атрибут для каждого действия, если я хочу/не хочу использовать https. Может ли кто-нибудь предложить лучший подход.   -  person Jitendra Pancholi    schedule 22.06.2012
comment
Почему бы просто не запустить его под SSL? Как и один ответ, сказанный в ветке, которую встретил Чак Норрис, обычно очень неправильно переключаться обратно на незашифрованный после того, как что-то сделал в SSL.   -  person Tim    schedule 22.06.2012


Ответы (1)


Я сделал это, используя приведенный ниже код.

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                filters.Add(new LimitHttpsAttribute());
            }

 public class LimitHttpsAttribute : IAuthorizationFilter
    {
        private static Type ssl = typeof(RequireHttpsAttribute);

        public void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }
            if (filterContext.HttpContext != null && filterContext.HttpContext.Request != null)
            {
                if (!filterContext.HttpContext.Request.IsSecureConnection ||
                    filterContext.HttpContext.Request.IsAuthenticated)
                {
                    return;
                }
                if (!RequiresSSL(filterContext))
                {
                    filterContext.Result = Unencrypted(filterContext.HttpContext.Request);
                }
            }
        }

        private bool RequiresSSL(AuthorizationContext filterContext)
        {
            return filterContext.ActionDescriptor != null ?
                filterContext.ActionDescriptor.GetCustomAttributes(ssl, true).Length > 0
                : false;
        }
}
person Jitendra Pancholi    schedule 06.07.2012