Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从HttpClient处理DependencyTelemetry时访问HttpContext_C#_Azure Application Insights - Fatal编程技术网

C# 从HttpClient处理DependencyTelemetry时访问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

我试图在记录依赖项时访问HttpContext,以便跟踪发出请求的用户。然而,它似乎总是失去了背景。有没有办法让我拿到它

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