Foothill Ответов: 1

C# альтернативы #if #endif для атрибутов


В последних двух приложениях MVC, которые я сделал, каждому действию контроллера предшествует этот небольшой фрагмент кода:
[HttpGet] // or [HttpPost]
#if (DEBUG == false)
  [RequireHttps]
#endif
public ActionResult Index()
{
  // do something
}
Я делаю это для того, чтобы ISS Express мог загрузить веб-сайт без какой-либо специальной обработки HTTPS, но я хочу, чтобы весь сайт требовал HTTPS сразу после экрана входа в систему, как только он будет загружен на рабочий сервер.

Что я хотел бы знать, так это есть ли альтернатива использованию условной компиляции #if...#endif для добавления атрибутов только для сборок выпуска.

Что я уже пробовал:

Я искал, но не смог найти никаких достойных альтернатив, кроме написания целого класса для обертывания класса контроллера. Условные атрибуты выглядят многообещающе, но я не вижу, как их можно применить к этой ситуации.

1 Ответов

Рейтинг:
9

Kornfeld Eliyahu Peter

Я считаю, что эти строки существуют потому, что разработчик не будет беспокоиться о настройке "Самозаверяющего сертификата" в локальном IIS...
Это легко и очень рекомендуется, если вы все равно пишете сайт только для HTTPS...

[РЕДАКТИРОВАТЬ]
И установите HTTPS на уровне сайта с помощью (при запуске приложения):

GlobalFilters.Filters.Add(new RequireHttpsAttribute());


Foothill

Вы можете создавать самозаверяющие сертификаты для ISSExpress!? Каждый день ты узнаешь что-то новое. Я предполагал, что что-то настолько голое, как IISExpress, не будет иметь такой возможности. У вас есть ссылка на эти шаги?

Хотя вы действительно предоставили жизнеспособный обходной путь, первоначальный вопрос все еще остается без ответа, и мне все еще любопытно, можно ли заменить директивы прекомпилятора в C#.

Kornfeld Eliyahu Peter

Я думаю, что это поможет вам настроить IISExpress: https://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx (но я бы сказал - использовать IIS даже для разработки)...
Что касается #if #endif - я не знаю никакой другой структуры, чтобы заменить его, но в вашем случае вы можете переместить его в начало приложения (put Filters.Добавить в условие) и оставить действия свободными от этого...