public HeaderPropagationMessageHandlerTest()
    {
        Handler = new SimpleHandler();

        State         = new HeaderPropagationValues();
        State.Headers = new Dictionary <string, StringValues>(StringComparer.OrdinalIgnoreCase);

        Configuration = new HeaderPropagationMessageHandlerOptions();

        var headerPropagationMessageHandler =
            new HeaderPropagationMessageHandler(Configuration, State)
        {
            InnerHandler = Handler
        };

        Client = new HttpClient(headerPropagationMessageHandler)
        {
            BaseAddress = new Uri("http://example.com")
        };
    }
示例#2
0
        /// <summary>
        /// Adds a message handler for propagating headers collected by the <see cref="HeaderPropagationMiddleware"/> to a outgoing request,
        /// explicitly specifying which headers to propagate.
        /// </summary>
        /// <remarks>This also allows to redefine the name to use for a header in the outgoing request.</remarks>
        /// <param name="builder">The <see cref="IHttpClientBuilder"/> to add the message handler to.</param>
        /// <param name="configure">A delegate used to configure the <see cref="HeaderPropagationMessageHandlerOptions"/>.</param>
        /// <returns>The <see cref="IHttpClientBuilder"/> so that additional calls can be chained.</returns>
        public static IHttpClientBuilder AddHeaderPropagation(this IHttpClientBuilder builder, Action <HeaderPropagationMessageHandlerOptions> configure)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (configure == null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            builder.Services.AddHeaderPropagation();

            builder.AddHttpMessageHandler(services =>
            {
                var options = new HeaderPropagationMessageHandlerOptions();
                configure(options);
                return(new HeaderPropagationMessageHandler(options, services.GetRequiredService <HeaderPropagationValues>()));
            });

            return(builder);
        }
示例#3
0
        /// <summary>
        /// Adds a message handler for propagating headers collected by the <see cref="HeaderPropagationMiddleware"/> to a outgoing request.
        /// </summary>
        /// <remarks>
        /// When using this method, all the configured headers will be applied to the outgoing HTTP requests.
        /// </remarks>
        /// <param name="builder">The <see cref="IHttpClientBuilder"/> to add the message handler to.</param>
        /// <returns>The <see cref="IHttpClientBuilder"/> so that additional calls can be chained.</returns>
        public static IHttpClientBuilder AddHeaderPropagation(this IHttpClientBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.AddHeaderPropagation();

            builder.AddHttpMessageHandler(services =>
            {
                var options           = new HeaderPropagationMessageHandlerOptions();
                var middlewareOptions = services.GetRequiredService <IOptions <HeaderPropagationOptions> >();
                for (var i = 0; i < middlewareOptions.Value.Headers.Count; i++)
                {
                    var header = middlewareOptions.Value.Headers[i];
                    options.Headers.Add(header.CapturedHeaderName, header.CapturedHeaderName);
                }
                return(new HeaderPropagationMessageHandler(options, services.GetRequiredService <HeaderPropagationValues>()));
            });

            return(builder);
        }
示例#4
0
 /// <summary>
 /// Creates a new instance of the <see cref="HeaderPropagationMessageHandler"/>.
 /// </summary>
 /// <param name="options">The options that define which headers are propagated.</param>
 /// <param name="values">The values of the headers to be propagated populated by the
 /// <see cref="HeaderPropagationMiddleware"/>.</param>
 public HeaderPropagationMessageHandler(HeaderPropagationMessageHandlerOptions options, HeaderPropagationValues values)
 {
     _options = options ?? throw new ArgumentNullException(nameof(options));
     _values  = values ?? throw new ArgumentNullException(nameof(values));
 }