Мой коллега и я посмотрели на это и полагаем, что мы нашли хорошее решение. Вот что мы придумали:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class HttpsRequiredAttribute : RequireHttpsAttribute
{
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
// Check to see if we're secure
string requirestr = ConfigurationManager.AppSettings["RequireHttps"];
bool require;
if (bool.TryParse(requirestr, out require) && require)
base.HandleNonHttpsRequest(filterContext);
}
}
Это работает за счет расширения RequireHttpsAttribute и может применяться к классу или методу, как указано в AttributeTargets. Затем мы отвергли виртуальную функцию в RequireHttpsAttribute. Этот метод проверяет в файле Web.config ключ «RequireHttps». Если он не может найти его, или это недопустимое значение bool (что проверяет bool.tryparse), то для него не требуется Https. Если он находит значение как true, то ему требуется HTTPS.
Если вы используете это расширение, вам нужно добавить в ваш Web.config ключ с именем «RequireHttps», например так:
<add key="RequireHttps" value="true"/>
Затем вы можете отключить требование для Https, изменив эту переменную в процессе отладки или изменив файл Web.config, чтобы он соответствовал требованиям, где бы вы ни развернули ваш сайт.