コード例 #1
0
        public async Task CorrelationId_ReturnedCorrectlyFromSingletonService()
        {
            var expectedHeaderName = new CorrelationIdOptions().RequestHeader;

            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                app.UseCorrelationId();
                app.Run(async rd =>
                {
                    var singleton = app.ApplicationServices.GetService(typeof(SingletonClass)) as SingletonClass;
                    var scoped    = app.ApplicationServices.GetService(typeof(ScopedClass)) as ScopedClass;

                    var data = Encoding.UTF8.GetBytes(singleton?.GetCorrelationFromScoped + "|" + scoped?.GetCorrelationFromScoped);

                    await rd.Response.Body.WriteAsync(data, 0, data.Length);
                });
            })
                          .ConfigureServices(sc =>
            {
                sc.AddDefaultCorrelationId();
                sc.TryAddSingleton <SingletonClass>();
                sc.TryAddScoped <ScopedClass>();
            });

            using var server = new TestServer(builder);

            // compare that first request matches the header and the scoped value
            var request = new HttpRequestMessage();

            var response = await server.CreateClient().SendAsync(request);

            var header = response.Headers.GetValues(expectedHeaderName).FirstOrDefault();

            var content = await response.Content.ReadAsStringAsync();

            var splitContent = content.Split('|');

            Assert.Equal(header, splitContent[0]);
            Assert.Equal(splitContent[0], splitContent[1]);

            // compare that second request matches the header and the scoped value
            var request2 = new HttpRequestMessage();

            var response2 = await server.CreateClient().SendAsync(request2);

            var header2 = response2.Headers.GetValues(expectedHeaderName).FirstOrDefault();

            var content2 = await response2.Content.ReadAsStringAsync();

            var splitContent2 = content2.Split('|');

            Assert.Equal(header2, splitContent2[0]);
            Assert.Equal(splitContent2[0], splitContent2[1]);
        }
コード例 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CorrelationIdMiddleware" /> class.
        /// </summary>
        /// <param name="next">The next middleware in the pipeline.</param>
        /// <param name="options">The configuration options.</param>
        public CorrelationIdMiddleware(RequestDelegate next, IOptions <CorrelationIdOptions> options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            this.next = next ?? throw new ArgumentNullException(nameof(next));

            this.options = options.Value;
        }
コード例 #3
0
 public BankSimulatorProcessor(
     IHttpClientFactory httpClientFactory,
     ICorrelationContextAccessor correlationContextAccessor,
     IOptions <CorrelationIdOptions> correlationIdOptions,
     IMapper mapper)
 {
     _httpClientFactory          = Guard.IsNotNull(httpClientFactory, nameof(httpClientFactory));
     _correlationContextAccessor = Guard.IsNotNull(correlationContextAccessor, nameof(correlationContextAccessor));
     _correlationIdOptions       = Guard.IsNotNull(correlationIdOptions, nameof(correlationIdOptions)).Value;
     _mapper = Guard.IsNotNull(mapper, nameof(mapper));
 }
コード例 #4
0
        public async Task ReturnsCorrelationIdInResponseHeader_WhenOptionSetToTrue()
        {
            var builder = new WebHostBuilder()
                          .Configure(app => app.UseCorrelationId());

            var server = new TestServer(builder);

            var response = await server.CreateClient().GetAsync("");

            var expectedHeaderName = new CorrelationIdOptions().Header;

            var header = response.Headers.GetValues(expectedHeaderName);

            Assert.NotNull(header);
        }
コード例 #5
0
        public async Task DoesNotReturnCorrelationIdInResponseHeader_WhenOptionSetToFalse()
        {
            var options = new CorrelationIdOptions {
                IncludeInResponse = false
            };

            var builder = new WebHostBuilder()
                          .Configure(app => app.UseCorrelationId(options));

            var server = new TestServer(builder);

            var response = await server.CreateClient().GetAsync("");

            var headerExists = response.Headers.TryGetValues(options.Header, out IEnumerable <string> headerValue);

            Assert.False(headerExists);
        }
コード例 #6
0
        public async Task CorrelationIdHeaderFieldName_MatchesOptions()
        {
            const string customHeader = "X-Test-Header";

            var options = new CorrelationIdOptions {
                Header = customHeader
            };

            var builder = new WebHostBuilder()
                          .Configure(app => app.UseCorrelationId(options));

            var server = new TestServer(builder);

            var response = await server.CreateClient().GetAsync("");

            var header = response.Headers.GetValues(customHeader);

            Assert.NotNull(header);
        }
コード例 #7
0
        public async Task CorrelationId_SetToCorrelationIdFromRequestHeader()
        {
            var expectedHeaderName = new CorrelationIdOptions().Header;

            var builder = new WebHostBuilder()
                          .Configure(app => app.UseCorrelationId());

            var server = new TestServer(builder);

            var request = new HttpRequestMessage();

            request.Headers.Add(expectedHeaderName, "123456");

            var response = await server.CreateClient().SendAsync(request);

            var header = response.Headers.GetValues(expectedHeaderName);

            Assert.NotNull(header);
        }
コード例 #8
0
        public async Task CorrelationId_NotSetToGuid_WhenUseGuidForCorrelationId_IsFalse()
        {
            var options = new CorrelationIdOptions {
                UseGuidForCorrelationId = false
            };

            var builder = new WebHostBuilder()
                          .Configure(app => app.UseCorrelationId(options))
                          .ConfigureServices(sc => sc.AddCorrelationId());

            var server = new TestServer(builder);

            var response = await server.CreateClient().GetAsync("");

            var header = response.Headers.GetValues(new CorrelationIdOptions().Header);

            var isGuid = Guid.TryParse(header.FirstOrDefault(), out _);

            Assert.False(isGuid);
        }
コード例 #9
0
        public async Task CorrelationId_SetToCorrelationIdFromRequestHeader()
        {
            var          expectedHeaderName  = new CorrelationIdOptions().RequestHeader;
            const string expectedHeaderValue = "123456";

            var builder = new WebHostBuilder()
                          .Configure(app => app.UseCorrelationId())
                          .ConfigureServices(sc => sc.AddDefaultCorrelationId());

            using var server = new TestServer(builder);

            var request = new HttpRequestMessage();

            request.Headers.Add(expectedHeaderName, expectedHeaderValue);

            var response = await server.CreateClient().SendAsync(request);

            var header = response.Headers.GetValues(expectedHeaderName);

            Assert.Single(header, expectedHeaderValue);
        }
コード例 #10
0
        protected virtual void CheckAndSetCorrelationIdOnResponse(
            HttpContext httpContext,
            CorrelationIdOptions options,
            string correlationId)
        {
            if (httpContext.Response.HasStarted)
            {
                return;
            }

            if (!options.SetResponseHeader)
            {
                return;
            }

            if (httpContext.Response.Headers.ContainsKey(options.HttpHeaderName))
            {
                return;
            }

            httpContext.Response.Headers[options.HttpHeaderName] = correlationId;
        }
コード例 #11
0
 public CorrelationIdHandler(ICorrelationContextAccessor correlationContextAccessor, IOptions <CorrelationIdOptions> correlationIdOptions)
 {
     _correlationContextAccessor = Guard.IsNotNull(correlationContextAccessor, nameof(correlationContextAccessor));
     _correlationIdOptions       = Guard.IsNotNull(correlationIdOptions, nameof(correlationIdOptions)).Value;
 }
コード例 #12
0
 public CorrelationIdMiddleware(RequestDelegate next, CorrelationIdOptions options)
 {
     _next    = next ?? throw new ArgumentNullException(nameof(next));
     _options = options;
 }
コード例 #13
0
 /// <summary>
 /// 初始化一个<see cref="AspNetCoreCorrelationIdProvider"/>类型的实例
 /// </summary>
 /// <param name="httpContextAccessor">Http上下文访问器</param>
 /// <param name="options">跟踪关联ID选项</param>
 public AspNetCoreCorrelationIdProvider(IHttpContextAccessor httpContextAccessor
                                        , IOptions <CorrelationIdOptions> options)
 {
     HttpContextAccessor = httpContextAccessor;
     Options             = options.Value;
 }
コード例 #14
0
        /// <summary>
        ///     Enables correlation IDs for the request.
        /// </summary>
        /// <param name="app"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IApplicationBuilder UseCorrelationId(this IApplicationBuilder app, CorrelationIdOptions options)
        {
            if (app == null)
            {
                throw new ArgumentNullException(nameof(app));
            }

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

            if (app.ApplicationServices.GetService(typeof(ICorrelationContextFactory)) == null)
            {
                throw new InvalidOperationException(
                          "Unable to find the required services. You must call the AddCorrelationId method in ConfigureServices in the application startup code.");
            }

            return(app.UseMiddleware <CorrelationIdMiddleware>(Options.Create(options)));
        }
コード例 #15
0
 public CorrelationIdEnricher(ICorrelationContextAccessor correlationContextAccessor, CorrelationIdOptions correlationIdOptions)
 {
     _correlationContextAccessor = Guard.IsNotNull(correlationContextAccessor, nameof(correlationContextAccessor));
     _correlationIdOptions       = Guard.IsNotNull(correlationIdOptions, nameof(correlationIdOptions));
 }
コード例 #16
0
 public AbpCorrelationIdMiddleware(IOptions <CorrelationIdOptions> options,
                                   ICorrelationIdProvider correlationIdProvider)
 {
     _options = options.Value;
     _correlationIdProvider = correlationIdProvider;
 }
コード例 #17
0
 public static IApplicationBuilder UseCorrelationId(this IApplicationBuilder app, CorrelationIdOptions options)
 {
     if (app == null)
     {
         throw new ArgumentNullException(nameof(app));
     }
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     return(app.UseMiddleware <CorrelationIdMiddleware>(Microsoft.Extensions.Options.Options.Create(options)));
 }
コード例 #18
0
 /// <summary>
 /// 初始化一个<see cref="BingCorrelationIdMiddleware"/>类型的实例
 /// </summary>
 /// <param name="next">方法</param>
 /// <param name="options">跟踪关联ID配置选项信息</param>
 /// <param name="correlationIdProvider">跟踪关联ID提供程序</param>
 public BingCorrelationIdMiddleware(RequestDelegate next, IOptions <CorrelationIdOptions> options, ICorrelationIdProvider correlationIdProvider)
 {
     _next    = next;
     _options = options.Value;
     _correlationIdProvider = correlationIdProvider;
 }
 public void Setup()
 {
     _httpRequestMock  = new Mock <HttpRequest>();
     _httpResponseMock = new Mock <HttpResponse>();
     _cidOptions       = new CorrelationIdOptions();
 }