2015-02-17 3 views
3

Я использую ASP.NET MVC, IIS 8, и я использую AngularJS для создания SPA. У меня есть только это правило маршрутизации, определенное в моем приложении MVC, который направляет к Index методе в Home контроллере, где мой SPA живет:Серверная маршрутизация с помощью AngularJS SPA

routes.MapRoute(
    name: "DefaultHome", 
    url: "", 
    defaults: new { controller = "Home", action = "Index" } 
); 

Теперь у меня есть куча на сторону клиента SPA маршрутов, и я хочу, чтобы все они доступный без префикса hashbang #/. html5Mode работает отлично - но только , когда приложение было загружено. Если я скопирую URL-адрес, закройте окно, откройте окно и вставьте его, я получаю ошибку IIS 404. Это имеет смысл, потому что маршрутизация выполняется на сервере.

Таким образом, совместное использование URL-адреса не работает, что я хотел бы сделать. Таким образом, маршрутизация также должна выполняться на стороне сервера, но каждый раз, когда я изменяю маршрут (добавляю клиентский маршрут), я не хочу создавать правило маршрутизации на стороне сервера.

Это можно сделать в целом? Как что-то, что URL переписывает /* на #/* без перенаправления пользователя? Исключение составляет /Static.

ответ

0

Просто измените URL-адрес на "{*catchall}". Например:

routes.MapRoute(
    name: "DefaultHome", 
    url: "{*catchall}", 
    defaults: new { controller ="Home", action= "Index" } 
); 
+0

Я не уверен, что это сработает. Если я создаю клиентский маршрут 'http: // server/#/some/cool/route', я хочу, чтобы он был доступен через http: // server/some/cool/route'. Будет ли это так? – Gaui

+1

Странно, когда я попробовал это. Представление загружается дважды, один раз в качестве главной страницы в MVC и один раз в UI-Router's '' – Gaui

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