Страницы справки 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 для других настроек.
Любые мысли о лучших практиках в этом отношении будут оценены.
Ответы
Ответ 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 в зависимости от того, где он развернут.