带有URL变量的页面未正确重定向。 Angular2路由

时间:2017-10-24 12:13:04

标签: angular authorization angular2-routing

我正在使用ASP.NET Web API 2进行angular4应用程序。我必须获取当前用户,然后检查是否允许他访问管理门户。

我的路由文件是:

{ path: ':lang', component: LanguageComponent, canActivate: [LoginGuard],
      children: [
        { path: 'admin/:comp', component: AdminComponent, canActivate: [AdministratorGuard]},
        { path: 'admin/news', component: NewsComponent, canActivate: [AdministratorGuard]},
        { path: 'admin/news/edit/:id', component: NewsEditComponent, canActivate: [AdministratorGuard]},
      ]
}

LoginGuard将连接到服务器,如果用户已登录,则会发送值true,并将配置文件保存在全局变量中。 (它将被称为整体)。

AdministratorGuard将检查全局变量以及他是否为管理员并允许访问该页面。

一切正常。问题在于F5或直接写入URL。

如果我转到默认页面然后导航到管理页面,它将正常工作。

如果我直接浏览此网址,则可以使用:

  

本地主机/ EN-US /管理/新闻

但是这个网址:

  

本地主机/ EN-US /管理/新闻/编辑/ 1

将重定向到网址

  

localhost / en-us / admin

我不知道为什么?它没有给我任何错误,但有一个不寻常的重定向到默认管理页面。这种情况发生在URL中包含id的所有URL中。它们将被重定向到它们适合的默认门户网站。

任何想法?谢谢

2 个答案:

答案 0 :(得分:0)

试试这样:

{
    path: ':lang',
    children: [
        { path: '', component: LanguageComponent, canActivate: [LoginGuard] },
        { path: 'admin/news', component: NewsComponent, canActivate: [AdministratorGuard] },
        { path: 'admin/news/edit/:id', component: AdminComponent, canActivate: [AdministratorGuard] },
        { path: 'admin/:comp', component: NewsEditComponent, canActivate: [AdministratorGuard] },
    ]
}

答案 1 :(得分:0)

更改路线的顺序

{ path: '', redirectTo: 'localhost/en-us/admin/news', pathMatch: 'full' },
{ path: ':lang', component: LanguageComponent, canActivate: [LoginGuard],
      children: [
    { path: 'admin/news', component: NewsComponent, canActivate: [AdministratorGuard]},
    { path: 'admin/news/edit/:id', component: NewsEditComponent, canActivate: [AdministratorGuard]},
    { path: 'admin/:comp', component: AdminComponent, canActivate: [AdministratorGuard]},
      ]
}

否则AdminComponent路由始终匹配,其他路由甚至不会被检查。