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

bla*_*ter 5 asp.net-mvc asp.net-mvc-routing angularjs

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

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

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

示例网址:

http://myapp.com/moreInfo
http://myapp.com/contactUs
Run Code Online (Sandbox Code Playgroud)

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

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

http://myapp.com/user/5
Run Code Online (Sandbox Code Playgroud)

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

小智 10

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

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

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

$locationProvider.html5Mode(true);
Run Code Online (Sandbox Code Playgroud)

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