Route zum Controller-Namespace in ASP.NET Core einschränken

Ich versuche, die Controller meiner ASP.NET Core-Routen auf einen bestimmten Namespace zu beschränken.

In früheren Versionen von ASP.NET MVC gab es eine Überladung, die ein @ liefertstring[] namespaces -Parameter beim Hinzufügen von Routen. Dies fehlt in ASP.NET MVC 6. Nach einigem googeln habe ich versucht, mit so etwas wie @ herumzuspiele

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
    );
});

aber es scheint nicht zu tun was ich will. Gibt es eine Möglichkeit, das Routingmodul auf einen bestimmten Namespace zu beschränken?

Aktualisiere

Ich habe gerade festgestellt, dass es möglicherweise etwas mit der Tatsache zu tun hat, dass ich Attribut-Routing auf jedem einzelnen Controller verwende. Funktioniert das Attributrouting auf den durch @ definierten Routeapp.UseMvc()?

Update 2

Mehr Details

Ich habe zwei völlig unabhängige Web-API-Projekte. Im Übrigen sind einige der Routen in beiden identisch (z. B.~/api/ping). Diese Projekte sind in der Produktion unabhängig, eines ist ein Endpunkt für Benutzer und eines ein Endpunkt für Administratoren.

Ich habe auch Unit-Tests mitMicrosoft.AspNet.TestHost. Einige dieser Komponententests erfordern die Funktionalität dieser beiden Web-API-Projekte (dh Sie benötigen den Endpunkt "admin", um einen Testfall für "user" vollständig einzurichten). Wenn ich jedoch auf beide API-Projekte verweise, ist der TestHost aufgrund der identischen Routen verwirrt und beklagt sich über "mehrere übereinstimmende Routen":

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()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage