Azure functions 使用ServiceBusTrigger访问Azure函数中TelemetryInitializer中的HttpContext

Azure functions 使用ServiceBusTrigger访问Azure函数中TelemetryInitializer中的HttpContext,azure-functions,azure-application-insights,Azure Functions,Azure Application Insights,我正试图通过一个外部web服务的验证错误来丰富我的依赖关系遥测,这个外部web服务是我根据从服务总线触发器接收到的消息调用的 我尝试的是在我的Startup类中添加HttpContextAccessor,如下所示: public class Startup : IWebJobsStartup { public void Configure(IWebJobsBuilder builder) { builder.Services.AddHttpClient();

我正试图通过一个外部web服务的验证错误来丰富我的依赖关系遥测,这个外部web服务是我根据从服务总线触发器接收到的消息调用的

我尝试的是在我的
Startup
类中添加
HttpContextAccessor
,如下所示:

public class Startup : IWebJobsStartup
{
    public void Configure(IWebJobsBuilder builder)
    {
        builder.Services.AddHttpClient();
        builder.Services.AddHttpContextAccessor();
        builder.Services.AddSingleton<ITelemetryInitializer, BadRequestReasonTelemetryInitializer();
    }
}
现在的问题是
HttpContext
总是空的。我认为这很有意义,因为我有一个带有
ServiceBusTrigger
的函数。但问题是如何从外部web服务调用中获取当前http上下文?有没有办法从
DependencyTelemetry
中获取它?我的目标是.NETCore2.1和FunctionRuntime v2

编辑(为清晰起见,添加调用):


您将永远无法从外部web服务获取HttpContext。Azure函数实例正在另一台计算机上的整个其他进程中运行。你需要从上下文中得到什么信息?我明白了。我希望从响应主体中获取验证错误,并将其作为自定义属性附加到遥测数据中。实际上,@PeterBons您能详细说明一下该评论吗?我想我们可能误解了对方,因为我在最初的问题中写这句话的方式。我已经在实际函数中添加了一些调用的代码。这是我想作为属性添加到遥测中的来自该调用的响应主体。
public class BadRequestReasonTelemetryInitializer : ITelemetryInitializer
{
    readonly IHttpContextAccessor _httpContextAccessor;

    public BadRequestReasonTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void Initialize(ITelemetry telemetry)
    {
        if (telemetry is DependencyTelemetry req)
        {
            if (req.ResultCode == "400")
            {
                // toggle re-use
                _httpContextAccessor.HttpContext.Request.EnableRewind();

                var stream = new StreamReader(_httpContextAccessor.HttpContext.Request.Body);
                var body = stream.ReadToEnd();

                // reset stream to preserve data
                _httpContextAccessor.HttpContext.Request.Body.Position = 0;
                req.Properties.Add("Reason", body);
            }
        }
    }
}
using (var httpClient = _httpClientFactory.CreateClient())
{
    httpClient.DefaultRequestHeaders.Authorization =
        new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
    using (var result = await httpClient.PostAsync($"{BaseUrl}/endpoint", payload))
    {
        // if the result is 400 I would like this to go to AI through the initializer
    }
}