应用洞察力读取响应主体

时间:2019-02-11 06:18:23

标签: c# .net azure-application-insights

我正在使用.net 4.5框架。我能够读取请求以使用RequestTelemetry登录应用程序见解。编写了下面的代码。

const replce = arr => {
   let n = arr.pop();
   arr.unshift(n)
   return arr;
};
console.log(replce(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']));

要读取响应,我遇到了上下文问题。Response.OutputStream是只写的,我们无法直接读取它。在核心中,我们具有response.body属性,但在.net 4.5框架中没有。 写下面的代码来登录我 n无法获得应用程序见解。

var requestTelemetry = telemetry as RequestTelemetry;

if (requestTelemetry == null) return;

var context = HttpContext.Current;
if (context == null) return;   
if (context.Request != null)
{
    if ((context.Request.HttpMethod == HttpMethod.Post.ToString()
        || context.Request.HttpMethod == HttpMethod.Put.ToString()) && WhitelistCheck(context.Request.RawUrl))
    {
        using (var reader = new StreamReader(context.Request.InputStream))
        {
            string requestPayload = reader.ReadToEnd();
            if (!telemetry.Context.Properties.ContainsKey(Request_Payload))
            {
                // TO DO: Don't log Personally identifiable information (PII)
                requestTelemetry.Properties.Add(Request_Payload, requestPayload);
            }
        }
    }
}

请提出建议

1 个答案:

答案 0 :(得分:0)

您是正确的,您无法从.Net 4.5中的HttpContext.Response中读取。

我建议的替代方法是将要测量的数据写入HttpContext.Items字典,然后将其添加到遥测对象中。

因此,在建立预期响应的位置,您将添加以下内容:

this.HttpContext.Items.Add("customProperty", "Information about the response");

然后,您将在尝试将响应数据添加到Application Insights的位置更改代码。

if (context.Items["customProperty"] != null && !telemetry.Context.Properties.ContainsKey(Request_Payload))
{
    // TO DO: Don't log Personally identifiable information (PII)
    requestTelemetry.Properties.Add(Request_Payload, context.Items["customProperty"].ToString());
}