WebAPI Help Pages: disable for Production release

2019-01-23 15:02发布

I have developed a number of internal REST interfaces using the older WCF framework in VS 2010. The ability for it to generate help pages was handy for DEV and QA platforms, but for a production release it was easy to disable the generation of these help pages in the web.config file:

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

I am now moving on to use the WebAPI framework instead (currently version 1 on VS 2012), but it doesn't appear to be as trivial to turn this feature off (i.e. I can't find any information on how to do this in a web.config file).

Certainly I can go ahead and do this by hand within the code itself, but surely there's an easier way; something akin to how WCF did it as described above. I'd like to use the web.config file approach since I already have the web.release.config transform files in place for other settings.

Any thoughts on best practices on this would be appreciated.

5条回答
Juvenile、少年°
2楼-- · 2019-01-23 15:28

You can use directive #if DEBUG to hide your code in realase

查看更多
Deceive 欺骗
3楼-- · 2019-01-23 15:31

Open the Global.asax.cs,modify your code like the following snippet code:

#if DEBUG
   AreaRegistration.RegisterAllAreas();
#endif

Because the help page is in the Area named 'HelpPage',so we can ignore it by the above code in the release or production environment.

查看更多
仙女界的扛把子
4楼-- · 2019-01-23 15:39

In case someone stumbles upon this question, here's how I managed to do it.

I added the following app setting to the base Web.config file:

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

I then transformed this value in my LIVE or RELEASE config file, like this:

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

Then I added the following code to the end of my WebApiConfig.Register method:

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

This will make the help page unavailable for configs with ExcludeHelpPage set to true.

查看更多
甜甜的少女心
5楼-- · 2019-01-23 15:41

My solution for disabling ApiController controller:

  • Uses WebConfig AppSettings config flag instead of (#if DEBUG)
  • Before method is invoked ExecuteAsync intercepts the invocation and checks feature toggle (feature flag);
  • if feature is disabled, returns HTTP 410 GONE
  • If it's common for many controllers, move the code to controller's base class

The code:

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);
    }
查看更多
等我变得足够好
6楼-- · 2019-01-23 15:47

Web API doesn't have an out of box support with respect to web.config based enabling or disabling of helppage.

Some options you can consider:

  • Since HelpPage is installed as an MVC area, when deploying to production you could just exclude this HelpPage folder.

  • Create an action filter which returns 404 as suggested here: Conditionally disable ASP.NET MVC Controller

NOTE: for the above cases, if you are using the default Web API template, then yeah you would need additional step of display/not display the Help link from the navigation bar.

查看更多
登录 后发表回答