C# 从HttpClient处理DependencyTelemetry时访问HttpContext
我试图在记录依赖项时访问HttpContext,以便跟踪发出请求的用户。然而,它似乎总是失去了背景。有没有办法让我拿到它C# 从HttpClient处理DependencyTelemetry时访问HttpContext,c#,azure-application-insights,C#,Azure Application Insights,我试图在记录依赖项时访问HttpContext,以便跟踪发出请求的用户。然而,它似乎总是失去了背景。有没有办法让我拿到它 public class MyProcessor : ITelemetryProcessor { public void Process(ITelemetry telemetry) { var dependency = telemetry as DependencyTelemetry; if (dependency != n
public class MyProcessor : ITelemetryProcessor
{
public void Process(ITelemetry telemetry)
{
var dependency = telemetry as DependencyTelemetry;
if (dependency != null) {
// This is always null when it's an HttpClient request.
var context = HttpContext.Current;
}
}
}
编辑
我已经找到了下面的解决方法,不过如果有更好的访问HttpContext的方法,那就太好了
public class ApplicationInsightsRequestTelemetryFilter : IActionFilter
{
public bool AllowMultiple => false;
public Task<HttpResponseMessage> ExecuteActionFilterAsync(
HttpActionContext actionContext,
CancellationToken cancellationToken,
Func<Task<HttpResponseMessage>> continuation)
{
var request = HttpContext.Current.GetRequestTelemetry();
if (request != null) {
request.Context.User.Id = HttpContext.Current?.User?.Identity?.Name;
}
return continuation();
}
}
公共类应用程序InsightsRequestTelemetryFilter:IActionFilter
{
public bool AllowMultiple=>false;
公共任务ExecuteActionFilterAsync(
HttpActionContext操作上下文,
CancellationToken CancellationToken,
Func(续)
{
var request=HttpContext.Current.GetRequestTelemetry();
if(请求!=null){
request.Context.User.Id=HttpContext.Current?.User?.Identity?.Name;
}
返回continuation();
}
}
然后,我可以在处理依赖项遥测时访问Context.User.Id
编辑
我撒谎,这只适用于Web服务调用。当UserContext是Http调用时,它的属性都为null