web-dev-qa-db-ja.com

WebAPIヘルプページ:本番リリースでは無効にする

VS 2010の古いWCFフレームワークを使用して、いくつかの内部RESTインターフェイスを開発しました。ヘルプページを生成する機能は、DEVおよびQAプラットフォームでは便利でしたが、製品リリースでは便利でした。 web.configファイルでこれらのヘルプページの生成を簡単に無効にできます。

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

代わりにWebAPIフレームワーク(現在はVS 2012のバージョン1)を使用するようになりましたが、この機能をオフにするのは簡単ではないようです(つまり、これを行う方法に関する情報が見つかりません。 web.configファイル)。

確かに私は先に進んでコード自体の中でこれを手作業で行うことができますが、確かにもっと簡単な方法があります。上記のようにWCFがそれを行った方法に似た何か。他の設定用にweb.release.config変換ファイルを既に配置しているので、web.configファイルアプローチを使用したいと思います。

これに関するベストプラクティスについての考えをいただければ幸いです。

15
GoodEnuf

Web APIは、ヘルプページのweb.configベースの有効化または無効化に関してすぐにサポートされていません。

あなたが考慮することができるいくつかのオプション:

  • HelpPageはMVC領域としてインストールされるため、本番環境にデプロイするときに、このHelpPageフォルダーを除外するだけで済みます。

  • ここで提案されているように、404を返すアクションフィルターを作成します。 ASP.NET MVCコントローラーを条件付きで無効にします

注:上記の場合、デフォルトのWeb APIテンプレートを使用している場合は、ナビゲーションバーからHelpリンクを表示する/表示しないという追加の手順が必要になります。

6
Kiran Challa

Global.asax.csを開き、次のスニペットコードのようにコードを変更します。

#if DEBUG
   AreaRegistration.RegisterAllAreas();
#endif

ヘルプページは「HelpPage」という名前の領域にあるため、リリース環境または本番環境の上記のコードでは無視できます。

7
Farb

ディレクティブ#ifDEBUGを使用して、リリースでコードを非表示にすることができます

4
jarek

誰かがこの質問に出くわした場合に備えて、これが私がどうやってそれをしたかです。

次のアプリ設定をベース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に設定されている構成ではヘルプページが使用できなくなります。

1
Soeholm

FarbとSoeholmの回答を組み合わせると、ヘルプページが表示されず、500ではなく404がスローされます。

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変換で変更しました。

1
mhenry1384

ApiControllerコントローラーを無効にするための私の解決策:

  • #if DEBUG)の代わりにWebConfigAppSettings構成フラグを使用します
  • メソッドが呼び出される前に、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);
    }
1
andrew.fox