Информация о приложении прочитать ответ тела - PullRequest
0 голосов
/ 11 февраля 2019

Я использую .net 4.5 framework.Я могу прочитать запрос на вход в приложения с помощью RequestTelemetry.Написан код ниже, который работает.

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);
            }
        }
    }
}

Чтобы прочитать ответ, у меня возникла проблема, т.е. context.Response.OutputStream только для записи, мы не можем прочитать его напрямую.По сути, у нас есть свойство response.body, но не в .net 4.5 framework.Напишите приведенный ниже код для входа в приложение, которое не работает.

using (var reader = new StreamReader(context.Response.OutputStream))
{
    string responseBody = reader.ReadToEnd();
    if (!telemetry.Context.Properties.ContainsKey("Response"))
    {
        requestTelemetry.Properties.Add("Response", responseBody);
    }
}

Пожалуйста, предложите

1 Ответ

0 голосов
/ 13 февраля 2019

Вы правы, что не можете прочитать из HttpContext.Response в .Net 4.5.

В качестве альтернативы я бы предложил записать данные, которые вы хотите измерить, в словарь 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...