コメントに記載されているように、特定のアクションやルートを無効にする方法はいくつかあります。
1)[NoAction]
System.Web.Http
から属性
[NoAction]
属性はApiControllerアクションのために適用することができます。そのようなメソッドが呼び出された場合、サーバーはHTTPコード405(Method not allowed)を返します。この属性はメソッドレベルでのみ適用され、クラスでは適用されません。したがって、すべての単一のメソッドをこの属性で修飾する必要があります。
2)カスタムアクションフィルター
このアプローチはあなたに多くのコントロールを与えるを書きます。あなたのフィルタは、クラスレベルで適用することができ、あなたのコントローラーが
public class MyNoActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (IfDisabledLogic(actionContext))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.NotFound);
}
else
base.OnActionExecuting(actionContext);
}
}
[MyNoActionFilter]
public class ValuesController : ApiController
{
// web api controller logic...
}
3)ルート(などの日付、ライセンス、機能のトグルとに応じて)アクセス可能であるかをどのような条件でいくつかのより高度なロジックを実装することができますConfiguration in WebApiConfig.cs
WebApiConfigのアクセスできないコントローラにWebAPIルートを追加し、このルートを存在しないコントローラにマップできます。フレームワークはこのルートをとり、コントローラを見つけず、クライアントに404リターンコードを送信します。望ましくない実行を避けるために、これらのルートを最初に配置することが重要です。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Routes.MapHttpRoute(
name: "DisabledApi",
routeTemplate: "api/b/{id}",
defaults: new { controller = "DoesNotExist", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
作業量のために属性を使用しないと言ったので、3番目のオプションをお勧めします。これは、ルート設定によって1つの場所が定義されるためです。また、将来的にルートを有効にしたい場合は、1つのルート定義のみを削除する必要があります。
コード内でそれらを削除しますか? – enkryptor
あなたは 'DisableFunctionalityActionFilter'のようなものを実装し、それを無効にする必要があるコントローラ/領域/アクションに割り当てることができます。 –
コントローラー名の名前を意味のないものに変更するだけです。 – Kadaj