web-dev-qa-db-ja.com

MapHttpRouteでデフォルトの名前空間を設定するにはどうすればよいですか?

標準のMapRouteメソッドを使用すると、コントローラーを検索する名前空間を表す文字列コレクションを渡すことができます。これはMapHttpRouteから消えたようです。新しいAPIルーティングを使用してデフォルトの名前空間をどのように定義しますか?

31
jwanga

Umbracoコアでこの問題が発生したため、独自のIHttpControllerSelectorを作成しました。ソースコードは次の場所にあります。

https://github.com/WebApiContrib/WebAPIContrib/blob/master/src/WebApiContrib/Selectors/NamespaceHttpControllerSelector.cs

WebAPIContribを含むnugetパッケージ NamespaceHttpControllerSelector をインストールすることもできます。

これを登録するには、アプリの起動時にこれを行うことができます。

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector),
    new NamespaceHttpControllerSelector(GlobalConfiguration.Configuration));

実装は非常に簡単で、MapHttpRouteはこれをサポートしていないため、手動で設定する必要がある「名前空間」データトークンセットを持つルートのみを扱います。例:

var r = routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
r.DataTokens["Namespaces"] = new string[] {"Foo"};

また、基になるデフォルトの実装はキャッシュから重複を削除するため、実装は重複した名前で見つかったコントローラーのみをキャッシュします。

16
Shazwazza

その機能は現在存在しません。

13
marcind

この機能は現時点では存在しませんが、できますただし、独自のIHttpControllerSelectorを実装することでこれを行うことができます。

このブログ記事では、詳細を少し掘り下げています。 ASP.NET Web API:名前空間を使用したWeb APIのバージョン管理

2
Jeroen Landheer

Web APIでデフォルトの名前空間を設定する必要はありません。参照されるアセンブリ内のすべての名前空間でコントローラーを検索します(名前が「Controller」で終わるパブリックタイプで、IHttpControllerを実装します)。

0
whyleee