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

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

 

我现在正在继续使用WebAPI框架(目前在VS 2012上使用版本1),但是关闭此function似乎并不简单(即我找不到任何有关如何执行此操作的信息)一个web.config文件)。

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

任何关于此的最佳实践的想法将不胜感激。

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

您可以考虑一些选项:

  • 由于HelpPage安装为MVC区域,因此在部署到生产环境时,您可以只排除此HelpPage文件夹。

  • 创建一个动作filter,按照此处的建议返回404: 有条件地禁用ASP.NET MVC控制器

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

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

 #if DEBUG AreaRegistration.RegisterAllAreas(); #endif 

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

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

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

我将以下应用程序设置添加到基本Web.config文件中:

  

然后我在我的LIVE或RELEASE配置文件中转换了这个值,如下所示:

  

然后我将以下代码添加到我的WebApiConfig.Register方法的末尾:

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

这将使ExcludeHelpPage设置为true的配置的帮助页面不可用。

我的禁用ApiController控制器的解决方案:

  • 使用WebConfig AppSettings配置标志而不是( #if DEBUG
  • 在调用方法之前, ExecuteAsync拦截调用并检查特征切换(特征标志);
  • 如果禁用function,则返回HTTP 410 GONE
  • 如果它对许多控制器很常见,请将代码移动到控制器的基类

代码:

 public class TestController : ApiController { public override Task 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); }