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转换文件。
如果您对这方面的最佳实践有任何想法,我们将不胜感激。
打开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的配置无法使用帮助页面。