Sto scrivendo un'applicazione a pagina singola con angular2 e MVC5. Sono nuovo ad entrambi, però, e ho problemi con il routing.Routing MVC6 all'applicazione a pagina singola senza perdere 404
mi piacerebbe corrispondere gli URL come:
/
-> vai alla mia pagina di indice, che bootstraps angolari/api/{controller}/{id?}
-> REST API/{*anythingelse}
-> se un file esiste lì , restituirlo come contenuto statico; altrimenti se l'angolare può instradarlo, avere percorso angolare; altrimenti restituire 404.
Il secondo punto è abbastanza semplice, e posso ottenere il routing sul lato client funzionante se sono disposto a rinunciare a 404 ritorni, ma non riesco a riconciliare tutto.
Sembra che questo dovrebbe funzionare:
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "api",
template: "api/{controller}/{id?}");
routes.MapRoute(
name: "spa",
template: "{*anythingelse}",
defaults: new { controller = "Home", action = "Index" });
});
e:
@RouteConfig([
{ path: "/", name: 'Splash', component: SplashView },
{ path: '/accounts/login', name: 'Login', component: LoginView },
{ path: '/accounts/register', name: 'Registration', component: RegistrationView },
{ path: '/home/...', name: 'Home', component: HomeView },
])
ma che semplicemente serve Index.cshtml per ogni richiesta che non è un file statico.
Mi sento come se questo fosse già un problema risolto, ma non sono stato in grado di trovare nulla online. Come si fa a farlo correttamente?
Sto utilizzando percorsi in stile "HTML5" anziché in stile hash.
È il vostro API REST utilizzando WebAPI? WebApi è un framework separato da MVC e ha una propria configurazione di route separata. Se usi MVC (non WebApi), non lo hai configurato correttamente - devi fornire un'azione predefinita 'default: new {action =" Index "}' o un'azione nell'URL 'api/{controller}/{ azione}/{id?} '. – NightOwl888
Inoltre, la tua ipotesi sull'ordine di instradamento è impossibile.Esegui angolare nel browser, quindi verrà instradato per primo. Altrimenti tenterà i percorsi che hai configurato nell'ordine esatto in cui li hai configurati sul lato server. Una volta che la richiesta raggiunge il server, non è possibile restituire nuovamente il controllo ad Angular. – NightOwl888
Ah, mi scuso. Ho messo giù MVC5 ma in realtà significava MVC6 su ASP.NET 5. In ASP.NET 5 i router WebAPI e MVC sono stati uniti. – Emdot