HttpContext и TelemetryInitializer

Я хочу прикрепить заявку "client_id" пользователя в качестве свойства к каждому запросу, отправленному в Application Insights.

Из того, что я прочитал, я должен реализоватьITelemetryInitializer но мне нужноHttpContext для запроса, чтобы получить "client_id". Смотрите мой инициализатор:

public class ClaimTelemetryInitializer : ITelemetryInitializer
{
    public HttpContext HttpContext { get; set; }

    public void Initialize(ITelemetry telemetry)
    {
        this.AddTelemetryContextPropertFromClaims(telemetry, "client_id");
    }

    private void AddTelemetryContextPropertFromClaims(ITelemetry telemetry, string claimName)
    {
        if (HttpContext != null)
        {
            var requestTelemetry = telemetry as RequestTelemetry;

            var claim = HttpContext.User.Claims.SingleOrDefault(x => x.Type.Equals(claimName, StringComparison.InvariantCultureIgnoreCase));

            if (claim != null)
            {
                telemetry.Context.Properties[claimName] = claim.Value;
            }
        }
    }
}

Я мог бы создать фильтр действий для установки контекста каждый раз, но это ужасно:

public class TrackClaimsAttribute : ActionFilterAttribute
{
    public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        var initialiser = TelemetryConfiguration.Active.TelemetryInitializers.OfType<ClaimTelemetryInitializer>().Single();

        initialiser.HttpContext = context.HttpContext;

        return base.OnActionExecutionAsync(context, next);
    }
}

Есть ли лучший способ достичь того, что я хочу сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос