Skip to content

IFlurlClientBuilder.AddMiddleware cuts the chain of delegating handlers #821

@andreikarkkanen

Description

@andreikarkkanen

Flurl.Http 4.0.2

The passing delegating handler, is typically a chain of handlers. However, AddMiddleware assigns the outer handler to the very first element in the chain of handlers, like this:

foreach (var middleware in Enumerable.Reverse(_addMiddleware).Select(create => create())) 
{
	middleware.InnerHandler = outerHandler;
	outerHandler = middleware;
}

This behavior disrupts the intended sequence of handlers in the chain. A better approach would be for AddMiddleware to follow the chain to its end before making any assignments.

while (middleware.InnerHandler is DelegatingHandler delegatingHandler)
{
    middleware = delegatingHandler;
}
middleware.InnerHandler = outerHandler;

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions