1

システム用に2 つの Web API コントローラーを提供する必要がPublicControllerありPrivateControllerます。これらには次のルートが必要です。

/public/{controller}/{id}

/private/{controller}/{id}

ファイアウォールでは、へのすべての要求/privateがブロックされ、ネットワーク内からのみ利用できます。ただし、慣例により、両方のコントローラーが両方のルートで使用できるため、 url を使用して要求することができPrivateControllerます (これは でのみ使用できるはずです) 。/private/public/PrivateController/1

PrivateControllerプライベート ルートでのみ使用できるように、ルートに有効なコントローラを指定する方法はありますか? または、この要件を満たすための他のプラクティスはありますか?

返信ありがとうございます。

4

1 に答える 1

1

パラメータを使用constraintsして、非常に単純な正規表現を使用した最も単純なケースでコントローラ名に制限を設けることができます。

config.Routes.MapHttpRoute(
    name: "private",
    routeTemplate: "api/private/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: new { controller = @"private" }
);

config.Routes.MapHttpRoute(
    name: "public",
    routeTemplate: "api/public/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: new { controller = @"public" }
);

したがって、「プライベート」ルートはプライベートという名前のコントローラーのみを受け入れ、「パブリック」ルートはパブリックという名前のコントローラーのみを受け入れます。複数のパブリック コントローラーとプライベート コントローラーがある場合は、正規表現を簡単に拡張してそれらに一致させることができます。

正規表現がニーズに十分でない場合は、IRouteConstraintインターフェイスを実装してカスタム ルート コンタラントを作成できます。この記事では、埋め込みの例を見つけることができます。

于 2013-03-11T09:06:47.073 に答える