2016-12-25 7 views
6

Я пытаюсь использовать ASP.NET MVC (не ядро) с AngularJS 2 и некоторые проблемы с маршрутизацией.Угловая 2 - Маршрутизация с ASP.NET MVC

Первого в RouteConfig.cs я следующий маршруты определен

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" } 
); 

В моем app.route.ts (угловые маршруты), я только что определил несколько маршрутов. Мой маршрут по умолчанию перенаправляет на другой маршрут, как

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

При запуске приложения, мой маршрут сервер/Home/Index подается вверх штрафом, который загружает угловое приложение и маршрут по умолчанию в моем app.route.ts перенаправляет меня для аукционов/E231 и окончательный URL моего браузера становится

http://localhost:53796/auctions/e231 

Все работает, как ожидалось, но когда я обновить страницу с этим URL, я получаю ошибку сервера для ресурса не найден, который также ожидается, потому что он ищет Контроллер называется Аукционы, который отсутствует в MVC. Я хочу знать, почему мой спа-спай-маршрут в RouteConfig.cs не поднимается? Также есть лучший способ обработать этот сценарий в asp.net mvc, потому что я хочу использовать некоторые из своих действий контроллера MVC, такие как/Account/Login и другие.

+0

Почему вы не используете один маршрут со стороны сервера, а другой с клиентской стороны? Я имею в виду, пусть бритва загружает домашний вид, а из html и js позволяет работать угловой маршрутизатор? –

+0

Это не очень хорошая идея, используя asp.net MVC (как пользовательский интерфейс) с угловым2. –

+0

@ HassanFalahi Да, но в то время требовалось использовать сервер Identity и использовать встроенные шаблоны для управления пользователями –

ответ

4

Хотя не лучший подход, по моему мнению, но все же работал. Я сделал это, используя ограничения на моем маршруте. Я обновил свой маршрут по умолчанию до:

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 
); 

Где у меня было только 4 контроллера MVC (Главная, Аккаунт, Загрузка, Ресурс). Мой спа-резервный маршрут находится по умолчанию, поэтому, если мы вводим что-либо другое, кроме этих имен контроллеров, угловое будет пытаться найти его в своем маршруте с помощью пути по умолчанию/Главная/Индексный сервер.

Надеюсь, это поможет кому-то.

4

Проблема в том, что при обновлении страницы будет использоваться первый маршрут, потому что он попытается получить контроллер с именем Auctions. Если вы удалите эту первую конфигурацию маршрута (по умолчанию) и используете только вторую (спа-резервную), она будет работать нормально, вот как я использовал в своих проектах, только ставить перед спа-резервными другими маршрутами mvc, которые вы хотите перенаправить на другие контроллеры mvc.

+0

, если я могу дать вам больше возможностей ... – JenonD

+0

Что за спасатель, искал это решение для очень долгое время. Огромное спасибо –

Смежные вопросы