Принудительно HTTPS на Appharbor

Связанные вопросы: здесь - здесь

У меня есть приложение ASP.NET, развернутое в appharbor. Ручной переход по URL-адресу https:// работает нормально, но я хотел бы ТОЛЬКО использовать HTTPS. То есть перенаправлять на HTTPS, если я получаю HTTP-запрос.

Есть два способа добиться этого, о которых я знаю: (1) использование web.config , который не работает из-за того, что заголовок X-Forwarded-Proto удаляется балансировщиком нагрузки на appharbor (?) или ( 2) создание пользовательского атрибута http, как показано здесь

К сожалению, ни один из этих подходов не работает для меня хорошо - оба дают мне цикл перенаправления :(. Все ответы, которые я могу найти, довольно старые, изменилось ли что-нибудь на appharbor/asp.net, о чем я должен знать?

Заранее спасибо.


person user1202032    schedule 18.04.2015    source источник


Ответы (1)


Используете ли вы MVC в своем приложении? Атрибут был предназначен для него.

Если это обычный ASP.NET, вы можете использовать HTTP Modules или Global.asax для достижения того же эффекта.

RequireHttpsAttribute by Rune должен работать. Я использую ServiceStack в AppHarbor, но на основе атрибута, который я использую для этого, из кода Rune. Он все еще используется сегодня.

Балансировщик нагрузки AppHb установит заголовок X-Forwarded-Proto в соответствии со схемой входящего протокола (http или https), поскольку трафик из балансировщика нагрузки перенаправляется на экземпляр IIS вашего приложения как HTTP (и, следовательно, исходная схема теряется).

person Tyst    schedule 18.04.2015
comment
Я использую MVC, да. Я действительно не уверен, что я делаю неправильно тогда. Я скопировал/вставил код Rune и переименовал его в MyRequireHttpsAttribute. Затем я добавил [MyRequireHttpsAttribute] поверх всех методов в одном из моих контроллеров. Теперь получаю ошибку о слишком большом количестве редиректов - person user1202032; 18.04.2015
comment
Вы все еще вызываете перенаправление в своем собственном коде или только атрибут? Действительно ли RequireHttpsAttribute попадает во время ваших запросов? - person Tyst; 19.04.2015
comment
Я поместил атрибут поверх моего класса контроллера, а не поверх отдельных методов. Кроме того, я переместил атрибут из папки App_Start в отдельную папку. Кажется, это решило мою проблему, и теперь я всегда подключаюсь по https. Однако я не уверен, что полностью понимаю, почему. Спасибо за твою помощь - person user1202032; 19.04.2015