告诉.NET WebApi客户端路由启动的位置

时间:2017-01-03 10:57:16

标签: .net angular asp.net-web-api routing client-server

我的应用包含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文件以允许他们直接访问该链接?

感谢您提前寻求帮助!

1 个答案:

答案 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完全知道段分隔符后面的路由'#'对他来说不是好事,而是为客户服务。

还有其他两种可能性来解决这个问题:

  1. 在web.config文件中创建url-rewriteRule。这里的问题是,您的浏览器只能从外部提供1个站点:第一个角度站点。如果您想从外部导航到角度的特定站点,则无法进行此操作。

  2. 在IIS中更改错误页面404(有点hackish):在此解决方案中,您将告诉您的IIS他的错误页面是角度应用程序。如果他不能提供提供给他的链接,他只需将angular调用为error-page,angular将收到url并可以路由到正确的站点。

  3. 尽管我的解决方案已被证明是最好的