角度-为索引页面设置两个URL

时间:2019-06-24 07:34:45

标签: angular iis

我的情况是,我在一个Angular站点中有两个部分,一个用户和一个B用户。这两个用户具有不同的布局样式,菜单等。它们从另一个站点链接到我的站点,因此我必须为其提供两个URL,例如,对于“ A”用户,“ xxx.com/A”,“ xxx.com” / B',代表B用户。

我无法在路由中使用“ {path:”,redirectTo:'/ login',pathMatch:'full'}”,因为我有两个索引/首页,但是如果我配置了应用程序路由。 module.ts如下:

const routes: Routes = [
  //{ path: '', redirectTo: '/login', pathMatch: 'full' },
  { path: 'login/A', component: LoginComponent},
  { path: 'login/B', component: LoginComponent}
];

然后,当我在IIS上运行它时,出现404错误。

enter image description here

我知道404错误可能是由于IIS URL重写引起的,但是我无法在服务器上添加它。无论如何,当他们链接到我的网站时,我可以确定两个不同的用户吗,还是可以使两个直接URL起作用?谢谢。

1 个答案:

答案 0 :(得分:0)

我编辑我的答案,所以也许我会带您正确的方向。 据我了解,您有2个要求。

1)确定访问者是UserA还是UserB

2)根据UserA或UserB更改网站的行为

首先要识别用户,我们应该从引用站点传递一些参数。通常,应该使用SSO机制(令牌等)完成此操作。但是在这种情况下,为了简化使用Querystring参数的情况。

用户A:http://yoursite.com?user=a

用户B:http://yoursite.com?user=b

因此,现在我们可以确定我们是否正在与用户A或用户B“交谈”。 从现在开始,我们可以根据需要自定义整个应用程序:

不同的布局,不同的布线等

要在特定用例上配置不同的路由,您可以做的是配置不同的路由定义。

const standardRoutes: Routes = [
    {
    path: 'main',
    loadChildren: 'app/main/standard/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/standard'
}
]

const AUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/a_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/a_user_url'
}];

const BUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/b_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/b_user_url'
}];

然后在App Module中处理不同的用户(如果需要定义不同的路由-通常仅在某些非常特殊的情况下才需要)

const standardRoutes: Routes = [
    {
    path: 'main',
    loadChildren: 'app/main/standard/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/standard'
}
]

const AUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/a_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/a_user_url'
}];

const BUserRoutes: Routes = [
{
    path: 'main',
    loadChildren: 'app/main/b_user/some.module#SomeModule',
    canActivate: [AuthenticationGuard]
},
{
    path: 'login',
    component: LoginComponent
},
{
    path: '**',
    redirectTo: 'main/b_user_url'
}];

@NgModule({
    declarations: [AppComponent],
    imports: [
        BrowserModule,
        BrowserAnimationsModule,
        HttpClientModule,
        RouterModule.forRoot(standardRoutes, {
            enableTracing: false
        }),

      
    ],
    providers: [
       
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
    public constructor(
        private router: Router
    ) {
        const user = router.routerState.snapshot.root.queryParams.user;
        if (user === 'a') {
            router.resetConfig(AUserRoutes);
        } else if (user === 'b') {
            router.resetConfig(BUserRoutes);
        
        }
 
    }
}