に、コントローラの名前空間へのルートを制限します。 ASP.NET MVCの以前のバージョンでは、私は特定の名前空間に私のASP.NETコアルートのコントローラを制限しようとしているASP.NETコア
ルートを追加するときstring[] namespaces
パラメータを提供過負荷がありました。これにはいくつかのGoogleをした後、私は
app.UseMvc(routes => {
var dataTokens = new RouteValueDictionary {
{
"Namespaces", new[] {"ProjectA.SomeNamespace.Controllers"}
}
};
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}",
defaults: null,
constraints: null,
dataTokens: dataTokens
);
});
のようなもので遊んでみましたが、私がやりたいようには見えないASP.NET MVC 6に欠けています。ルーティングエンジンを特定の名前空間に制限する方法はありますか?
更新
私はちょうどそれは私が個々のコントローラ上のルーティング属性を使用しているという事実と何かをする必要があります実現?属性ルーティングはapp.UseMvc()
で定義されたルートをファンクしますか?
アップデート2
詳細:
私は2つの完全に独立したWeb APIプロジェクトをしました。ちなみに、いくつかのルートは両方で同じです(つまり、~/api/ping
)。これらのプロジェクトはProductionでは独立しています。一方はユーザーのエンドポイントであり、もう一方は管理者のエンドポイントです。
私もMicrosoft.AspNet.TestHost
を使用して、ユニットテストを持っています。これらのユニットテストのいくつかは、これらのWeb APIプロジェクトの両方の機能を必要とします(つまり、 "user"のテストケースを完全にセットアップするための "admin"エンドポイントが必要です)。私は両方のAPIプロジェクトを参照する場合でも、TestHostがあるため、同一ルートの混乱、それは「複数のマッチングルート」文句を言う:
Microsoft.AspNet.Diagnostics.DeveloperExceptionPageMiddleware: Error: An unhandled exception has occurred while executing the request
Microsoft.AspNet.Mvc.Infrastructure.AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:
ProjectA.SomeNamespace.Controllers.PingController.Ping
ProjectB.SomeNamespace.Controllers.PingController.Ping
at Microsoft.AspNet.Mvc.Infrastructure.DefaultActionSelector.SelectAsync(RouteContext context)
at Microsoft.AspNet.Mvc.Infrastructure.MvcRouteHandler.<RouteAsync>d__6.MoveNext()
"複数の一致するルート" - ここでスタックトレースに完全なエラーを付けることはできますか? –
確かに、更新された質問をご覧ください。 –