我正在处理的ASP MVC应用程序使用带有超时的表单身份验证。这意味着当会话超时并且用户单击刷新时,它们将被重定向到登录页面,之后它们将被定向回原始页面而没有URL的深层链接客户端#部分。
有没有办法让ngRoute将其深层链接的客户端网址建立在查询字符串上?例如
http://somesite.com/?p=/home
答案 0 :(得分:0)
要做的第一件事是让ASP MVC服务器端捕获任何与客户端角度路由相关的URL并返回单页应用程序HTML。注册ASP MVC路由时,添加以下规则
routes.MapRoute(
name: "Angular",
url: "x/{*clientPath}",
如果“x /”是您的客户端应用程序的基础部分,当然如果您的整个应用程序是单页角应用程序,您可以在URL中没有“x”,在这种情况下您需要添加前面的规则以呈现ASP MVC服务器端帐户登录页面。
然后在你的Angular应用程序中确保使用Html5模式,如此
app.config(["$locationProvider", "$routeProvider", function ($locationProvider, $routeProvider) {
$locationProvider.html5Mode({
enabled: true,
requireBase: false,
rewriteLinks: true
});
$routeProvider.when("/x/docs/upload", {
......
});
$routeProvider.when("/x/docs/view", {
......
});
$routeProvider.otherwise({
redirectTo: "/x/docs/upload"
});
}]);
当您打开浏览器并导航到http://mysite/x/what/ever/you/like时,服务器端将使用XController.Index呈现Views \ x \ Index.cshtml,这将加载您的单页应用程序,然后ngRoute将接管并呈现“x / what / ever / you / like”部分的相关视图。