使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务
Posted
技术标签:
【中文标题】使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务【英文标题】:how to send tenantid to downstream services when using ocelot with abp 【发布时间】:2021-09-05 17:30:03 【问题描述】:我目前正在使用 ABP 和 ocelot 为微服务构建一个 api 网关。一切正常,但现在我想使用 api 网关作为域解析器。 ABP 的域解析器用于解析来自不同域的租户 ID,但我希望 ocelot 能够将解析后的租户 ID 发送到下游服务(在对下游服务的请求的标头中包含 __tenant 标头)。
【问题讨论】:
【参考方案1】:您可以创建一个Middleware
以将ResolvedId
添加到请求标头中。所以豹猫会把编辑后的请求用tenantId
发送到下游。
例子:
public class MyMiddleware : IMiddleware, ITransientDependency
private readonly ICurrentTenant CurrentTenant;
public MyMiddleware(ICurrentTenant currentTenant)
CurrentTenant = currentTenant;
public Task InvokeAsync(HttpContext context, RequestDelegate next)
context.Request.Headers.Add("__tenant", CurrentTenant.Id.ToString());
return next(context);
如您所见,中间件处理请求,它将 CurrentTenantId 添加到请求中。 CurrentTenant 之前由您的“域租户解析器”找到。
你可以在app.UseMultiTenancy()
和app.UseOcelot()
之间使用这个中间件
...
app.UseMultiTenancy();
app.UseMiddleware<MyMiddleware>(); // it must be here, between them
app.UseOcelot();
...
【讨论】:
以上是关于使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务的主要内容,如果未能解决你的问题,请参考以下文章
在从 UI (ABP.IO) 创建租户的过程中创建新角色(通过代码)