我正在使用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中。它们将被重定向到它们适合的默认门户网站。
任何想法?谢谢
答案 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
路由始终匹配,其他路由甚至不会被检查。