WebAPI帮助页面:禁用生产版本

时间:2014-06-11 16:51:40

标签: c# rest asp.net-web-api asp.net-web-api-helppages

我在VS 2010中使用旧的WCF框架开发了许多内部REST接口。它生成帮助页面的能力对于DEV和QA平台来说很方便,但对于生产版本,很容易禁用生成这些帮助页面位于 web.config 文件中:

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

我现在正在转而使用WebAPI框架(目前在VS 2012上使用版本1),但关闭此功能似乎并不简单(即我无法找到任何内容)有关如何在web.config文件中执行此操作的信息)。

当然,我可以在代码本身内手动执行此操作,但肯定有更简单的方法;类似于WCF如上所述的做法。我想使用web.config文件方法,因为我已经为其他设置准备了web.release.config转换文件。

对此最佳做法的任何想法都将不胜感激。

6 个答案:

答案 0 :(得分:7)

打开Global.asax.cs,修改您的代码,如下面的代码段:

#if DEBUG
   AreaRegistration.RegisterAllAreas();
#endif

由于帮助页面位于名为“HelpPage”的区域中,因此我们可以通过发布或生产环境中的上述代码忽略它。

答案 1 :(得分:6)

对于基于web.config的启用或禁用helppage,Web API没有开箱即用的支持。

您可以考虑的一些选项:

注意:对于上述情况,如果您使用的是默认的Web API模板,那么您需要在导航栏中显示/不显示Help链接的其他步骤。

答案 2 :(得分:4)

您可以使用指令#if DEBUG在realase中隐藏代码

答案 3 :(得分:1)

如果有人偶然发现了这个问题,我就是这样做的。

我将以下应用设置添加到基本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配置的帮助页面不可用。

答案 4 :(得分:1)

我的禁用Uncaught DOMException: Failed to execute 'querySelector' on 'Element': '#58d3ba2dfc21ab4b4dc7199f-ade55c26e70e4' is not a valid selector. at http://localhost:8585/client/dev/assets/js/clientAccount/directives/player.js:5:12043 (anonymous) @ player.js:5 player.js:5 Uncaught DOMException: Failed to execute 'querySelector' on 'Element': #58d5fa103f2bba6af0327842-85fa6e4830107' is not a valid selector. at http://localhost:8585/client/dev/assets/js/clientAccount/directives/player.js:5:12043 控制器的解决方案:

  • 使用WebConfig AppSettings配置标志而不是(ApiController
  • 调用方法之前#if DEBUG拦截调用并检查功能切换(功能标记);
  • 如果功能已停用,则返回ExecuteAsync
  • 如果对许多控制器来说很常见,请将代码移到控制器的基类

代码:

HTTP 410 GONE

答案 5 :(得分:1)

将Farb和Soeholm的答案结合在一起,将不会显示“帮助”页面,并且会抛出404而不是500。

在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转换对其进行了更改。