15

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

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

4

6 回答 6

8

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

#if DEBUG
   AreaRegistration.RegisterAllAreas();
#endif

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

于 2016-07-22T10:04:45.263 回答
6

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

您可以考虑的一些选项:

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

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

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

于 2014-06-11T18:36:51.273 回答
4

您可以使用指令#if DEBUG 来隐藏您的代码

于 2015-07-11T14:01:25.053 回答
2

我禁用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);
    }
于 2017-03-27T11:06:18.793 回答
2

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

于 2019-01-24T15:17:58.303 回答
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 设置为 true 的配置无法使用帮助页面。

于 2015-10-22T22:02:11.140 回答