You*_*uxu 5 azure azure-application-insights asp.net-core
我有一个 .Net core Web App API,它接受来自前端的请求,然后将 HTTP POST 请求发送到 Azure 搜索以获取搜索结果。
我只是使用内置应用程序洞察记录请求和依赖项源中的基本信息,并且具有零日志记录代码。
现在,我想扩展默认的 Application Insights 依赖项表以将请求正文添加到 Azure 搜索。
用最少的代码最简单的方法是什么?
小智 0
根据您的要求,您可以尝试以下代码:
public class RequestBodyInitializer : ITelemetryInitializer
{
readonly IHttpContextAccessor httpContextAccessor;
public RequestBodyInitializer(IHttpContextAccessor httpContextAccessor)
{
this.httpContextAccessor = httpContextAccessor;
}
public void Initialize(ITelemetry telemetry)
{
if (telemetry is RequestTelemetry requestTelemetry)
{
if ((httpContextAccessor.HttpContext.Request.Method == HttpMethods.Post ||
httpContextAccessor.HttpContext.Request.Method == HttpMethods.Put) &&
httpContextAccessor.HttpContext.Request.Body.CanRead)
{
const string jsonBody = "JsonBody";
if (requestTelemetry.Properties.ContainsKey(jsonBody))
{
return;
}
//Allows re-usage of the stream
httpContextAccessor.HttpContext.Request.EnableRewind();
var stream = new StreamReader(httpContextAccessor.HttpContext.Request.Body);
var body = stream.ReadToEnd();
//Reset the stream so data is not lost
httpContextAccessor.HttpContext.Request.Body.Position = 0;
requestTelemetry.Properties.Add(jsonBody, body);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到“启动”>“配置服务”
services.AddSingleton<ITelemetryInitializer, RequestBodyInitializer>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1352 次 |
| 最近记录: |