2016-12-25 51 views
6

Próbuję użyć ASP.NET MVC (nie core) z AngularJS 2 i mając pewne problemy z routingiem.Angular 2 - Routing z ASP.NET MVC

pierwsze w RouteConfig.cs, mam następujące tras zdefiniowane

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

// when the user types in a link handled by client side routing to the address bar 
// or refreshes the page, that triggers the server routing. The server should pass 
// that onto the client, so Angular can handle the route 
routes.MapRoute(
    name: "spa-fallback", 
    url: "{*url}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

W moim app.route.ts (kątowe tras), właśnie zdefiniowano kilka tras. Moja trasa domyślna przekierowuje do innej drogi jak

export const router: Routes = [{ 
     path: '', 
     redirectTo: 'auctions/e231', 
     pathMatch: 'full' 
    }, 
    { 
     path: 'auctions/:id', 
     component: AuctionComponent, 
     children: [] 
    } 
]; 

Kiedy uruchomić aplikację, moja droga serwer/Home/Index jest serwowane grzywny, która ładuje kanciasty i trasa domyślna aplikacja w moich app.route.ts mnie przekierowuje z aukcji/E231 i końcowy URL przeglądarce staje

http://localhost:53796/auctions/e231 

Wszystko działa zgodnie z oczekiwaniami, ale kiedy odświeżyć stronę z tego adresu URL, pojawia się błąd serwera dla zasobu nie znaleziono, który jest oczekiwany również dlatego, że poszukuje Kontroler o nazwie Aukcje, których nie ma w MVC. Chcę wiedzieć, dlaczego moja droga powrotna spa w RouteConfig.cs nie odbiera? Czy istnieje lepszy sposób na obsłużenie tego scenariusza w asp.net mvc, ponieważ chcę móc korzystać z niektórych moich działań kontrolera MVC takich jak/Account/Login i inne.

+0

Dlaczego nie używasz jednej trasy od strony serwera, a innej od strony klienta? Chodzi mi o to, żeby widok domowy brzytwy był ładowany, a z html i js niech działa raster kątowy? –

+0

To nie jest dobry pomysł przy użyciu asp.net MVC (jako interfejs użytkownika) z angle2. –

+0

@HassanFalahi Tak, ale wymaganie było wtedy takie, aby korzystać z serwera tożsamości i używać wbudowanych szablonów do zarządzania użytkownikami –

Odpowiedz

4

Chociaż nie jest to najlepsze podejście w mojej opinii, ale mimo to zadziałało. Zrobiłem to, korzystając z ograniczeń na mojej trasie. Zaktualizowałem swoją domyślną trasę do:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    constraints: new { controller = "Home|Account|Upload|Resource" } // this is basically a regular expression 
); 

Gdzie miałem tylko 4 kontrolery MVC (Dom, konto, przesyłanie, zasoby). Moja droga powrotna spa jest domyślna, więc jeśli wpiszemy coś innego niż te nazwy kontrolerów, to kanciasta spróbuje znaleźć ją w swojej trasie z domyślną ścieżką serwera Home/Index.

Mam nadzieję, że to pomoże komuś.

4

Problem polega na tym, że po odświeżeniu strony zostanie użyta pierwsza trasa, ponieważ będzie ona próbowała uzyskać kontroler o nazwie Aukcje. Jeśli usuniesz tę pierwszą konfigurację trasy (Domyślnie) i użyjesz tylko drugiej (powrót awaryjny spa), to będzie działało dobrze, w taki sposób użyłem w moich projektach, tylko umieściłem przed powrotem awaryjne inne trasy mvc, które chcesz przekierować do innych kontrolery mvc.

+0

, jeśli mogę dać ci więcej upvotes ... – JenonD

+0

Co za ratownik, szukając tego rozwiązania dla bardzo długi czas. Wielkie dzięki –