Подтвердить что ты не робот

Страницы справки WebAPI: отключить для выпуска Production

Я разработал ряд внутренних интерфейсов 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 для других настроек.

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

4b9b3361

Ответ 1

Веб-интерфейс API не поддерживает внешнюю поддержку в отношении включения или отключения справочной страницы на основе web.config.

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

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

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

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

Ответ 2

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

#if DEBUG
   AreaRegistration.RegisterAllAreas();
#endif

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

Ответ 3

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

Ответ 4

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

Я добавил в базовый файл 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.

Ответ 5

Мое решение для отключения контроллера 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);
    }

Ответ 6

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

В Global.asax.cs

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

а затем в WebApiConfig.Register

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

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