Piszę aplikację jednostronicową z kątami 2 i MVC5. Jestem jednak nowicjuszem i mam problem z routingiem.Routing MVC6 do aplikacji jednostronicowej bez utraty 404
Chciałbym dopasować adresy jak:
/
-> przejdź do mojej strony indeksu, który bootstraps kątowe/api/{controller}/{id?}
-> REST API
/{*anythingelse}
-> jeśli plik istnieje tam , zwróć go jako statyczną treść; w przeciwnym razie, jeśli kanciasty może go poprowadzić, należy wyznaczyć trasę kątową; w przeciwnym razie zwróci 404.
Drugi punkt jest dość łatwy, i mogę sprawić, że routing po stronie klienta będzie działał, jeśli będę chciał zrezygnować z 404 zwrotów, ale nie mogę tego pogodzić.
Wydaje się, że to powinno działać:
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" });
});
oraz:
@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 },
])
Ale to właśnie służy Index.cshtml dla każdego wniosku, że nie jest plikiem statycznym.
Czuję, że to już musi być rozwiązany problem, ale nie udało mi się znaleźć niczego w Internecie. Jak to zrobić właściwie?
Używam ścieżek w stylu "HTML5", a nie w stylu mieszania.
Czy Twój API REST za pomocą WebApi? WebApi jest oddzielną strukturą od MVC i ma oddzielną konfigurację trasy. Jeśli używasz MVC (nie WebApi), nie masz tego poprawnie skonfigurowanego - musisz podać domyślną akcję 'defaults: new {action =" Index "}' lub akcję w adresie URL 'api/{controller}/{ akcja}/{id?} '. – NightOwl888
Również twoje założenie o porządku trasy jest niemożliwe.Angularne przebiegi w przeglądarce, więc najpierw będzie trasa. W przeciwnym razie spróbuje skonfigurowane trasy w dokładnej kolejności, w jakiej je skonfigurujesz po stronie serwera. Gdy żądanie trafi na serwer, nie możesz ponownie przekazać kontroli do Angular. – NightOwl888
Ach, przepraszam. Odłożyłem MVC5, ale faktycznie oznaczało MVC6 na ASP.NET 5. W ASP.NET 5 routery WebAPI i MVC zostały scalone. – Emdot