Skip to content

Allow async method for HeaderPropagationOptions.ValueFilter #63760

@wu-yafeng

Description

@wu-yafeng

Background and Motivation

Consider following code:

builder.Services.AddHttpClient()
    .AddHeaderPropagation(options =>
    {
        options.Headers.Add("Authorization", context =>
        {
            // await here
            var access_token = context.HttpContext.GetTokenAsync("access_token").GetAwaiter().GetResult();

            return access_token ?? StringValues.Empty;
        });
    });

Proposed API

Add property AsyncValueFilter for HeaderPropagationEntry.

namespace Microsoft.AspNetCore.HeaderPropagation;

public class HeaderPropagationEntry
{
+    public Func<HeaderPropagationContext, Task<StringValues>>? AsyncValueFilter { get; }
}

public sealed class HeaderPropagationEntryCollection : Collection<HeaderPropagationEntry>
{
+   public void Add(string headerName, Func<HeaderPropagationContext, Task<StringValues>> valueFilter);
}

Usage Examples

builder.Services.AddHttpClient()
    .AddHeaderPropagation(options =>
    {
        options.Headers.Add("Authorization", async context =>
        {
            // await here
            var access_token = await context.HttpContext.GetTokenAsync("access_token");

            return access_token ?? StringValues.Empty;
        });
    });

Metadata

Metadata

Assignees

No one assigned

    Labels

    api-suggestionEarly API idea and discussion, it is NOT ready for implementationarea-middlewareIncludes: URL rewrite, redirect, response cache/compression, session, and other general middlewares

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions