Представляя новый шлюз, который будет ссылаться на существующую реализацию Ocelot, эта существующая реализация ocelot имеет специальный вызов промежуточного программного обеспечения в OcelotPipelineExtensions.cs, который редактирует хост на основе определенных c правил, как здесь:
//custom code - route to specific host
builder.UseDownstreamHostFinderMiddleware();
// Not sure if this is the best place for this but we use the downstream url
// as the basis for our cache key.
builder.UseOutputCacheMiddleware();
//We fire off the request and set the response on the scoped data repo
builder.UseHttpRequesterMiddleware();
return builder.Build();`
Моя проблема в том, что я хочу вызвать другое промежуточное ПО после этого настраиваемого без фактического редактирования проекта Ocelot (используемого другой командой и пытающегося не вносить никаких изменений, которые приводят к дополнительному тестированию), в данном случае, в частности, OcelotPipelineExtensions.cs. Я пытаюсь добиться того, чтобы я мог поместить в свой шлюз только logi c, который будет вызывать дополнительное промежуточное ПО перед окончательным вызовом builder.UseHttpRequesterMiddleware () ;. Я пробовал следующее, используя внедрение и переопределения промежуточного программного обеспечения:
var configuration = new OcelotPipelineConfiguration
{
PreQueryStringBuilderMiddleware = async (ctx, next) =>
{
ctx.DownstreamRequest.Host = "MyOverRiddenHost";
await next.Invoke();
}
};`
Но моя проблема со всеми переопределениями, которые я пробовал, заключается в том, что все они вызываются перед пользовательским промежуточным программным обеспечением, которое устанавливает для хоста что-то еще. Есть ли способ с уровня шлюза без редактирования проекта Ocelot вставить пользовательское промежуточное ПО / переопределение, а также определить порядок (в этом случае запускать непосредственно перед последним промежуточным ПО).