HttpContext e TelemetryInitializer
Desejo anexar a reivindicação "client_id" do usuário como uma propriedade a todas as solicitações enviadas ao Application Insights.
Pelo que li, eu deveria estar implementandoITelemetryInitializer
mas eu preciso doHttpContext
para a solicitação para recuperar "client_id". Veja meu inicializador:
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;
}
}
}
}
Eu poderia criar um filtro de ação para definir o contexto toda vez, mas isso parece horrível:
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);
}
}
Existe uma maneira melhor de conseguir o que eu quero fazer?