リクエストが失敗したときにHTTPリクエスト本文を記録する最も良い方法は何ですか?Application Insightで失敗した要求に対して要求本文を記録するベストプラクティスは何ですか?
私は例外ロガーオーバーライドすることで、未処理の例外をログに記録しています:上記のコードで
public class AiExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
if (context != null && context.Exception != null)
{
ExceptionTelemetry telemetry = new ExceptionTelemetry(context.Exception);
// the requestBody is always empty because the stream is non-rewinadable?
string requestBody = context.Request.Content.ReadAsStringAsync().Result;
telemetry.Properties.Add("Request Body", requestBody);
Logger.LogException(telemetry);
}
base.Log(context);
}
}
を、要求内容は常に空です。私もthisを試しましたが、GetBufferlessInputStreamを呼び出すため、サポートされていないメソッドの例外がスローされます。だからそれはどちらもうまくいかない。
DelegatingHandlerを使用してすべてのリクエストコンテンツをログに記録できましたが、処理されない例外によって発生したリクエストのリクエストのみを記録したいと思います。
アイデア?
私はMitch StewartのCopyToアプローチを使用してもあなたの答えを受け入れました。しかし、彼のコードが不完全で修正が必要なので、正しい答えとしてマークすることはできませんでした。 –
@ErtayShashkoこれはうまくいきませんなぜこれが受け入れられた答えなのか分かりません。あなたは位置をリセットすることはできません。 – Phill
@Phill、ご使用の環境でrequestBodyStreamの位置をリセットできない場合は、MemoryStreamにコピーしてMemoryStreamの位置をリセットします。その後、MemoryStreamからデータを読み取ることができます。 MemoryStream ms =新しいMemoryStream(); requestBodyStream.CopyTo(ms); ms.Position = 0; – Amor