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ファイルアプローチを使用したいと思います。
これに関するベストプラクティスについての考えをいただければ幸いです。
Web APIは、ヘルプページのweb.configベースの有効化または無効化に関してすぐにサポートされていません。
あなたが考慮することができるいくつかのオプション:
HelpPageはMVC領域としてインストールされるため、本番環境にデプロイするときに、このHelpPage
フォルダーを除外するだけで済みます。
ここで提案されているように、404を返すアクションフィルターを作成します。 ASP.NET MVCコントローラーを条件付きで無効にします
注:上記の場合、デフォルトのWeb APIテンプレートを使用している場合は、ナビゲーションバーからHelp
リンクを表示する/表示しないという追加の手順が必要になります。
Global.asax.csを開き、次のスニペットコードのようにコードを変更します。
#if DEBUG
AreaRegistration.RegisterAllAreas();
#endif
ヘルプページは「HelpPage」という名前の領域にあるため、リリース環境または本番環境の上記のコードでは無視できます。
ディレクティブ#ifDEBUGを使用して、リリースでコードを非表示にすることができます
誰かがこの質問に出くわした場合に備えて、これが私がどうやってそれをしたかです。
次のアプリ設定をベース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に設定されている構成ではヘルプページが使用できなくなります。
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変換で変更しました。
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);
}