2016-08-17 16 views
0

いくつかのAPIを持つASP.NETアプリケーションがあるとしましょう。例えばASP.NETアプリケーションのいくつかのAPIを無効にする方法

{HostName}/api/a/*  
{HostName}/api/b/* 

は今、私はすべての{HostName}/api/a/*のAPIを無効にする(しかし/api/b/*まま)。クライアントが/api/a/* APIを呼び出すと、404エラーが発生します。クライアントが/api/b/* APIを呼び出すと、正常に応答します。

C#ASP.NETアプリケーションでこれを行う方法はありますか?

+2

コード内でそれらを削除しますか? – enkryptor

+0

あなたは 'DisableFunctionalityActionFilter'のようなものを実装し、それを無効にする必要があるコントローラ/領域/アクションに割り当てることができます。 –

+0

コントローラー名の名前を意味のないものに変更するだけです。 – Kadaj

答えて

3

コメントに記載されているように、特定のアクションやルートを無効にする方法はいくつかあります。

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つのルート定義のみを削除する必要があります。

+0

あなたの目立つ答えをありがとう – Mabraygas

関連する問題