我在ASP上使用ABP v3.3。. NET Core 3.1在微服务环境中的应用
我们想用服务名作为微服务路由的前缀。例如,会计服务将是:
/accounting/api/invoices
/accounting/api/payments
这对于我们自己的控制器来说很好,因为我们可以用route属性定义路由。例如:[Route("accounting/api/invoices")]
然而,对于内部abp路由,如/api/abp/api-definition
,其中控制器在abp模块中定义,这些路由属性已经应用,我们如何添加这个前缀?
我在文档中找不到任何与此相关的内容,除了常规控制器创建的情况,这在这里不适用。
以上是为了支持所有微服务都在内部负载均衡器后面的场景,并且所有/accounting
路由都应该转发到这个单一的服务。当使用IHttpClientProxy进行服务到服务请求时,这是很麻烦的,因为/api/abp/api-definition
请求需要转发到特定的微服务。
我发现的唯一替代方法是将所有服务的根路径设置为http://<loadbalancer>/<servicename>
,然后在每个服务中添加app.UsePathBase("/accounting")
行,从请求中剥离上述路径以启用路由匹配。
然而,由于显示了这个额外的路由路径,这会导致生成的Swagger文档产生额外的问题,这可能会让人感到困惑。
感谢您的帮助
可以,但不建议这样做,因为您需要替换几个代码部分。例如
-
https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs L94
-
https://github.com/abpframework/abp-samples/blob/master/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGatewayHostModule.cs L126
-
https://github.com/abpframework/abp/blob/dev/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs L14