用于已添加书签的Angular SPA URL的ASP.NET MVC 4路由

时间:2013-10-02 17:20:53

标签: asp.net-mvc angularjs asp.net-mvc-routing

我正在尝试在AngularJS中构建单页面应用程序,并在HTML5模式下完成客户端路由。如果用户在我的网站上为页面添加书签,我理解我需要一个基本的服务器端路由方案,但我真的希望它只是总是提供我的单个主页并将相同的URL传播到客户端路由部分。 / p>

这个包罗万象的路线完美适用于只有一个深度的简单网址:

routes.MapRoute(
    "Default", // Route name
    "{*catchall}", // URL with parameters
    new { controller = "Home", action = "Index" } // Parameter defaults
);

示例网址:

http://myapp.com/moreInfo
http://myapp.com/contactUs

“moreInfo”和“contactUs”只是Angular中的命名路由。单页应用程序的唯一真正入口点是http://myapp.com。到目前为止,这一切都非常顺利。

但是,当我尝试深入到多个路径时,应用程序会进入无限循环:

http://myapp.com/user/5

这是因为我的服务器端路由不足以将“user / 5”URL“传递”到我的客户端应用程序吗?我是否需要做一些特别的事情以确保无论URL的嵌套程度如何,它都会正确地传递给我的SPA?

2 个答案:

答案 0 :(得分:10)

问题不在于路由配置,我有一个类似的角度js和mvc 4设置,下面的路由工作正常。

routes.MapRoute(
  name: "Application",
  url: "{*url}",
  defaults: new { controller = "Home", action = "Index" },
  namespaces: new[] { "MyApp.Web.Controllers" });

你是否在angular config方法中将html5Mode设置为true?

$locationProvider.html5Mode(true);

您可以尝试使用fiddler向您的应用发送获取请求并查看响应。如果是301或302,那么您将遇到服务器端重定向循环问题。如果它是200,则你的angular / js代码可能是问题。

答案 1 :(得分:0)

如果我理解正确,您希望将'/ user / 5'赋予Angular中的路由引擎。如果是这种情况,Angular会在哈希之后处理路由。这意味着您想要的路线是

http://myapp.com#/user/5

您还需要使用以下路由正确配置$ routeProvider:

angular.module('yourApp', []).
  config(['$routeProvider', function($routeProvider) {
  $routeProvider.
      when('/user/:id', {templateUrl: 'SOME_HTML_FILE'}).
      otherwise({redirectTo: '/'});
}]);

然后您需要在控制器中获取路径参数:

function someController($scope, $routeParams) {
  if($routeParams.id){
       alert('Super Fly!');
  }
}