我目前正在使用ABP和ocelot为微服务构建一个api网关。一切都很好,但现在我想使用api网关作为域解析程序。ABP的域解析程序用于解析来自不同域的租户id,但我希望ocelot能够将解析的租户id发送到下游服务(在向下游服务的请求的标头中包括__tenant标头(。
您可以创建一个Middleware
,用于将ResolvedId
添加到请求头中。因此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();
...