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]); }
/// <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; }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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; }
public CorrelationIdHandler(ICorrelationContextAccessor correlationContextAccessor, IOptions <CorrelationIdOptions> correlationIdOptions) { _correlationContextAccessor = Guard.IsNotNull(correlationContextAccessor, nameof(correlationContextAccessor)); _correlationIdOptions = Guard.IsNotNull(correlationIdOptions, nameof(correlationIdOptions)).Value; }
public CorrelationIdMiddleware(RequestDelegate next, CorrelationIdOptions options) { _next = next ?? throw new ArgumentNullException(nameof(next)); _options = options; }
/// <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; }
/// <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))); }
public CorrelationIdEnricher(ICorrelationContextAccessor correlationContextAccessor, CorrelationIdOptions correlationIdOptions) { _correlationContextAccessor = Guard.IsNotNull(correlationContextAccessor, nameof(correlationContextAccessor)); _correlationIdOptions = Guard.IsNotNull(correlationIdOptions, nameof(correlationIdOptions)); }
public AbpCorrelationIdMiddleware(IOptions <CorrelationIdOptions> options, ICorrelationIdProvider correlationIdProvider) { _options = options.Value; _correlationIdProvider = correlationIdProvider; }
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))); }
/// <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(); }