Sto provando a limitare i controller delle mie rotte ASP.NET Core a un determinato spazio dei nomi.Limita il percorso allo spazio dei nomi del controller in ASP.NET Core
Nelle versioni precedenti di ASP.NET MVC si verificava un sovraccarico che ha fornito un parametro string[] namespaces
durante l'aggiunta di route. Questo non è presente in ASP.NET MVC 6. Così, dopo un po 'googling, ho provato a giocare con qualcosa di simile
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
);
});
ma non sembra fare quello che voglio. C'è un modo per limitare il motore di routing a un determinato spazio dei nomi?
Aggiornamento
Ho appena realizzato che può avere qualcosa a che fare con il fatto che sto usando l'attributo di routing su ogni singolo controllore? L'attributo routing funk su i percorsi definiti da app.UseMvc()
?
Aggiornamento 2
Maggiori dettagli:
Ho due progetti Web API completamente indipendenti. Per inciso, alcuni dei percorsi sono identici in entrambi (ad esempio ~/api/ping
). Questi progetti sono indipendenti nella produzione, uno è un endpoint per gli utenti, uno è un endpoint per gli amministratori.
Ho anche dei test unitari, utilizzando Microsoft.AspNet.TestHost
. Alcuni di questi test di unità richiedono la funzionalità di entrambi questi progetti di API Web (ovvero richiedono l'endpoint "admin" per configurare completamente un caso di test per "utente"). Ma quando mi riferisco entrambi i progetti API, il testhost si confonde a causa dei percorsi identici e lamenta "molteplici percorsi corrispondenti":
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()
"percorsi di corrispondenza multipli": puoi inserire l'errore completo con traccia dello stack qui? –
Certo, per favore vedi la mia domanda aggiornata. –