我目前正在使用ABP和ocelot为微服务构建api网关。一切正常,但现在我想使用api网关作为域解析器。总部基地的域名解析器能够从不同的域名解析tenantid,但我希望ocelot能够将解析的租户id发送到下游服务(在请求下游服务的报头中包含__tenant报头)。
发布于 2021-06-24 19:00:24
您可以创建一个将ResolvedId
添加到请求头部的Middleware
。因此,ocelot会将编辑后的请求与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();
...
https://stackoverflow.com/questions/68078156
复制相似问题