WebAPI帮助页:对于生产版本禁用

本文关键字:版本 于生产 帮助 WebAPI | 更新日期: 2023-09-27 18:08:23

我在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转换文件。

如果您对这方面的最佳实践有任何想法,我们将不胜感激。

WebAPI帮助页:对于生产版本禁用

打开Global.asax.cs,像以下代码片段一样修改代码:

#if DEBUG
   AreaRegistration.RegisterAllAreas();
#endif

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

Web API在启用或禁用基于Web.config的帮助页方面没有现成的支持。

您可以考虑的一些选项:

  • 由于HelpPage是作为MVC区域安装的,因此在部署到生产中,您可以排除此HelpPage文件夹。

  • 创建一个返回404的操作过滤器,如下所示:有条件地禁用ASP。NET MVC控制器

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

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

我禁用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);
    }

结合Farb和Soeholm的答案,您得到的帮助页面不会显示and,它会抛出404而不是500。

在Global.asax.cs 中

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

然后在WebApiConfig中。注册

#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转换来更改它。

如果有人偶然发现这个问题,下面是我如何做到的。

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

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

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

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

然后,我在WebApiConfig的末尾添加了以下代码。注册方式:

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

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