Получил правильную идею от @svoychik.Промежуточное программное обеспечение добавляет выходные значения в HttpContext.Items.См. Пример:
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Threading.Tasks;
namespace Test.API.Middleware
{
public class ValueMiddleware
{
private readonly RequestDelegate next;
public ApiKeyMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext httpContext)
{
if (!context.Items.ContainsKey("ApplicationData"))
{
httpContext.Items["ApplicationData"] = "Important Data";
}
}
}
}
Затем, когда вам нужно получить все эти элементы для понимания приложения, вы можете просто использовать следующий инициализатор:
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.AspNetCore.Http;
namespace Test.API.TelemetryInitializers : ITelemetryInitializer
{
public class HttpContextItemsTelemetryInitializer
{
private readonly IHttpContextAccessor httpContextAccessor;
public HttpContextItemsTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
{
this.httpContextAccessor = httpContextAccessor;
}
public void Initialize(ITelemetry telemetry)
{
var context = httpContextAccessor.HttpContext;
if (context == null)
{
return;
}
foreach (var item in context.Items)
{
var itemKey = item.Key.ToString();
// Remove some pollution that Microsoft and the systems adds to the HttpContext Items.
if (itemKey.Contains("Microsoft") || itemKey.Contains("System"))
{
continue;
}
if (!telemetry.Context.GlobalProperties.ContainsKey(itemKey))
{
telemetry.Context.GlobalProperties.Add(itemKey, item.Value.ToString());
}
}
}
}
}
Установить инициализатор и понимание приложения вваш файл Startup.cs как в следующем примере:
using Test.API.TelemetryInitializers;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
namespace Test.API
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSingleton<ITelemetryInitializer, HttpContextItemsTelemetryInitializer>();
services.AddApplicationInsightsTelemetry();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMiddleware<ValueMiddleware>();
app.UseMvc();
}
}
}
Затем он просто добавляет все значения HttpContext.Items к пониманию вашего приложения.