我正在使用ASP.NET MVC处理路由(使用RouteCollection类)。但我的前端是用角度写的,在某些地方我想用Angular的$ location更改url,我希望它支持HTML5,所以我把这行添加到我的module.config:
$locationProvider.html5Mode(true);
但从那时起,我的路由似乎已由Angular处理。
例如我的SPA在mysite.com/user上,我希望使用Angular的$ location更改网址(例如,当用户点击标签网址更改为mysite.com/user/tab而不重新加载时)。
但是当用户从该页面导航到任何其他页面(例如mysite.com/other)时,我希望由ASP.NET MVC的路由处理。
现在发生的是我的网址更改为mysite.com/other,但网站未导航到该网页,即MVC路由无法处理更改。
修改
我没有在Angular中定义任何路由,我添加$locationProvider.html5Mode(true);
答案 0 :(得分:2)
不幸的是没有。如果您的角度SPA在foo.com
上托管并启用了HTML 5模式,foo.com/spaRoute1
将会点击您的ASP.Net服务器,并期望找到该路线(可能是控制器= SpaRoute1动作=索引)。
您需要将默认路线设置为始终解析为负责提供SPA的控制器/操作。同时定义您需要的任何其他路线,这些路线并非特定于您的SPA。
答案 1 :(得分:0)
我对ASP.Net不太了解。但是我用这样的节点j解决了同样的问题。
我解决了使用push API启用服务器的同样问题。基本上角度在客户端呈现页面并通过#
找到确切的路线。您可以启用html5模式删除#
。
$locationProvider.html5Mode({
enabled:true,
requireBase: false
});
请记住,不要忘记在服务器端启用推送API支持。只需添加
//To suport push API
// Just for DEMO in your case it may be different
app.use('/admin/*', function(req,res){
var user = req.session.user;
res.render("adminView",{user:user});
});
这里当您在没有#tag的情况下硬刷新或直接输入浏览器。服务器将呈现主页(索引)页面并加载您所需的所有文件。之后,angular将为您处理所有路由,因为您已启用html5模式,因此不再需要在URL中添加#。