Ich versuche, die Controller meiner ASP.NET Core-Routen auf einen bestimmten Namespace zu beschränken.Route zu Controller-Namespace in ASP.NET Core beschränken
In früheren Versionen von ASP.NET MVC gab es eine Überladung, die beim Hinzufügen von Routen einen string[] namespaces
Parameter zur Verfügung stellte. Dies ist in ASP.NET MVC fehlt 6. Nach einiger googeln habe ich versucht, das Spiel mit so etwas wie
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, die Routing-Engine auf einen bestimmten Namespace zu beschränken?
aktualisiert
ich es einfach realisiert werden kann, etwas mit der Tatsache zu tun hat, dass ich Attribut bin mit auf jedem einzelnen Controller-Routing? Führt das Attribut-Routing die von app.UseMvc()
definierten Routen durch?
Update 2
Weitere Details:
Ich habe zwei völlig unabhängige Web-API-Projekte. Übrigens sind einige der Routen in beiden identisch (dh ~/api/ping
). Diese Projekte sind in der Produktion unabhängig, einer ist ein Endpunkt für Benutzer, einer ist ein Endpunkt für Administratoren.
Ich habe auch Unit-Tests, mit Microsoft.AspNet.TestHost
. Einige dieser Komponententests erfordern die Funktionalität beider Web-API-Projekte (z. B. "admin" -Endpunkt zum vollständigen Einrichten eines Testfalls für "Benutzer"). Aber wenn ich beide API-Projekte verweisen, wird die testhost verwirrt wegen der identischen Routen und es beschwert sich über „mehrere passende 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()
"mehrere übereinstimmende Routen" - können Sie hier einen vollständigen Fehler mit Stack-Trace setzen? –
Sicher, bitte sehen Sie meine aktualisierte Frage. –