ngRoute可以使用QueryString参数而不是哈希吗?

时间:2016-01-28 15:31:27

标签: angularjs ngroute

我正在处理的ASP MVC应用程序使用带有超时的表单身份验证。这意味着当会话超时并且用户单击刷新时,它们将被重定向到登录页面,之后它们将被定向回原始页面而没有URL的深层链接客户端#部分。

有没有办法让ngRoute将其深层链接的客户端网址建立在查询字符串上?例如

http://somesite.com/?p=/home

1 个答案:

答案 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”部分的相关视图。