我的应用包含2个分词应用。一个asp.net-WebApi和一个angular2-clientsite-app。
我在IIS-Server上为2个应用程序制作了2个网站,我遇到了路由问题。
2个网站的网址是:
WebApi:http://testurl.com/api/
Angular2:http://testurl.com/ui/
现在我的anuglar2应用程序实现了一个典型的角度路由,它允许我访问例如这个链接: http://testurl.com/ui/search/result/562335
如果我导航到主站点,我可以轻松点击此链接,但如果外国用户复制该链接并与他的朋友共享,并且他们通过单击该链接开始访问我的站点,IIS-Servers告诉他们,链接坏了......
如何编辑web.config文件以允许他们直接访问该链接?
感谢您提前寻求帮助!
答案 0 :(得分:0)
我的问题有一个非常简单的解决方案。
在您的路由文件" app.routing.ts"您只需将参数useHash:true添加到路由的ExtraOptions即可,因为IIS需要段分隔符'#'认识到他必须服务一个网站。在#IIS知道之后,URL的其余部分属于客户端应用程序。现在它看起来像这样(注意最后一行代码):
export const appRoutes: Routes = [
{ path: '', component: Search },
{ path: 'login', component: Login },
{ path: 'index.html', component: Search },
{ path: 'searchRooms', component: Search },
{ path: 'searchRooms/inquire', component: Search },
{ path: 'searchRooms/reserve', component: Search },
{ path: 'searchRooms/authCatcher', component: Search },
{ path: 'searchRooms/redirect', component: Search },
{ path: 'searchRooms/scheduler', component: Search },
{ path: 'searchRooms/scheduler/:roomId', component: Search },
{ path: 'inquire', component: Inquire },
{ path: 'register', component: Reserve },
{ path: '**', component: NotFound }
];
export const appRoutingProviders: any[] = [
];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes, {useHash: true});
现在angular会自动更改所有路由:localhost:8080 / search变为localhost:8080 /#/ search,因此IIS完全知道段分隔符后面的路由'#'对他来说不是好事,而是为客户服务。
还有其他两种可能性来解决这个问题:
在web.config文件中创建url-rewriteRule。这里的问题是,您的浏览器只能从外部提供1个站点:第一个角度站点。如果您想从外部导航到角度的特定站点,则无法进行此操作。
在IIS中更改错误页面404(有点hackish):在此解决方案中,您将告诉您的IIS他的错误页面是角度应用程序。如果他不能提供提供给他的链接,他只需将angular调用为error-page,angular将收到url并可以路由到正确的站点。
尽管我的解决方案已被证明是最好的