如何解决是否可以将传出 HTTP 请求依赖项的 POST 正文添加到 Application Insight 中的可用信息中?
我的项目在 .NET Framework 4.7.2 中,我正在尝试将依赖项的 POST 主体内容(对外部 API 的 POST 请求)添加到 Application Insight 中的可用数据。
我希望能够做这样的事情(可以通过 RequestTelemetry 完成):
public class ConfiguratorDependencyTelemetryInitializer : ITelemetryInitializer
{
private const string RequestBodyProperty = "RequestBody";
/// <summary>
/// Initializes properties of the specified ITelemetry object
/// </summary>
/// <param name="telemetry">The telemetry object to initialize</param>
public void Initialize(ITelemetry telemetry)
{
var dependencyTelemetry = telemetry as DependencyTelemetry;
if (dependencyTelemetry == null)
{
return;
}
if (HttpContext.Current == null)
{
return;
}
var request = HttpContext.Current.Request;
if (request.HttpMethod == "POST" || request.HttpMethod == "PUT")
{
using (var streamReader = new StreamReader(request.InputStream,request.ContentEncoding,true,1024,true))
{
request.InputStream.Position = 0;
var requestContent = streamReader.ReadToEnd();
request.InputStream.Position = 0;
if (string.IsNullOrEmpty(requestContent))
{
return;
}
if (dependencyTelemetry.Properties.ContainsKey(RequestBodyProperty))
{
dependencyTelemetry.Properties[RequestBodyProperty] = requestContent;
}
else
{
dependencyTelemetry.Properties.Add(RequestBodyProperty,requestContent);
}
}
}
}
}
我似乎无法访问发送的实际请求。此时,HttpContext.Current 为 null,遥测对象中似乎没有任何正文内容的痕迹。
我也尝试从这个方法获取请求:
dependencyTelemetry.TryGetOperationDetail("HttpRequest",out var rawRequest)
但是 out 参数的类型是 HttpWebRequest,我似乎无法找到如何访问请求对象的正文(或内容)。 HttpWebRequest 的 GetRequestStream 方法仅用于写入。
甚至可以使用自定义遥测初始化程序来做到这一点吗?如果没有,是否还有其他方法可以从 Application Insights 访问该信息?
总而言之,我想:
- 访问 DependencyTelemetry 所涉及的 POST 请求
- 访问所述请求的正文内容
- 将所述内容作为属性添加到 DependencyTelemetry
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。