it-roy-ru.com

Страницы справки WebAPI: отключение для производственной версии

Я разработал ряд внутренних REST интерфейсов, используя более старую среду WCF в VS 2010. Возможность генерировать страницы справки была удобна для платформ DEV и QA, но для производственного выпуска было легко отключить генерацию из этих страниц справки в web.config файле:

<standardEndpoint name="" helpEnabled="false" automaticFormatSelectionEnabled="true"/>

Сейчас я перехожу к использованию инфраструктуры WebAPI (в настоящее время версия 1 на VS 2012), но, кажется, не так уж тривиально отключить эту функцию (т.е. я не могу найти какую-либо информацию о том, как это сделать, в файл web.config). 

Конечно, я могу пойти дальше и сделать это вручную в самом коде, но, несомненно, есть более простой путь; что-то похожее на то, как WCF сделал это, как описано выше. Я хотел бы использовать файловый подход web.config, поскольку у меня уже есть файлы преобразования web.release.config для других настроек.

Любые мысли о лучших практиках по этому вопросу будут оценены.

14
GoodEnuf

Web API не имеет встроенной поддержки в отношении включения или отключения поддержки на основе web.config.

Некоторые варианты, которые вы можете рассмотреть: 

  • Поскольку HelpPage устанавливается как область MVC, при развертывании в Production можно просто исключить эту папку HelpPage.

  • Создайте фильтр действий, который возвращает 404, как предложено здесь: Условно отключите ASP.NET MVC Controller

ПРИМЕЧАНИЕ: для вышеупомянутых случаев, если вы используете шаблон веб-API по умолчанию, то да, вам потребуется дополнительный шаг отображения/не отображения ссылки Help из панели навигации.

6
Kiran Challa

Откройте Global.asax.cs, измените свой код, как показано в следующем фрагменте кода:

#if DEBUG
   AreaRegistration.RegisterAllAreas();
#endif

Поскольку страница справки находится в области с именем «HelpPage», поэтому мы можем игнорировать ее с помощью приведенного выше кода в выпуске или производственной среде.

6
Farb

Вы можете использовать директиву #if DEBUG, чтобы скрыть ваш код в релизе

4
jarek

В случае, если кто-то наткнется на этот вопрос, вот как мне удалось это сделать.

Я добавил следующие настройки приложения в базовый файл Web.config:

<add key="ExcludeHelpPage" value="false" />

Затем я преобразовал это значение в мой конфигурационный файл LIVE или RELEASE, например:

<add key="ExcludeHelpPage" value="true" xdt:Transform="Replace" xdt:Locator="Match(key)"  />

Затем я добавил следующий код в конец моего метода WebApiConfig.Register:

if (Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["ExcludeHelpPage"]))
{
    config.Routes.IgnoreRoute("help", "help");
}

Это сделает страницу справки недоступной для конфигов, если для параметра ExcludeHelpPage установлено значение true.

1
Soeholm

Мое решение для отключения контроллера ApiController:

  • Использует флаг конфигурации WebConfig AppSettings вместо (#if DEBUG)
  • Перед вызовом метода ExecuteAsync перехватывает вызов и проверяет переключение функции (флаг функции);
  • если функция отключена, возвращает HTTP 410 GONE
  • Если это характерно для многих контроллеров, переместите код в базовый класс контроллера

Код:

public class TestController : ApiController
{
    public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
    {
        var featureFlag = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["EnableTest"]);

        if (featureFlag == false)
        {
            return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Gone));
        }

        return base.ExecuteAsync(controllerContext, cancellationToken);
    }
1
andrew.fox

Сочетая ответы Фарба и Сохольма, вы получите страницу справки, которая не будет отображаться, и вместо 40 она выдает 404.

В Global.asax.cs

#if DEBUG // Make help page unavailable on release builds
    AreaRegistration.RegisterAllAreas(); 
#endif

а затем в WebApiConfig.Register

#if !DEBUG 
    config.Routes.IgnoreRoute("help", "help"); // Make help page, which is now unavailable on release builds, throw a 404 instead of a 500.
#endif

Только я не использовал DEBUG, я установил его и изменил с помощью преобразования XML в зависимости от того, где он развернут.

0
mhenry1384