Raw Request Body にアクセスする方法は、 を使用するIHttpRequest.GetRawBody()
か、から読み取ることIHttpRequest.InputStream
です。
ただし、HTTP リクエストの本文は転送のみのストリームであるため、デフォルトでは一度しか呼び出すことができません。これは通常、リクエスト DTO を逆シリアル化するために ServiceStack によって呼び出されます。シリアライゼーションとデシリアライゼーションのドキュメントは、ServiceStack にリクエストのデシリアライズをスキップし、未読のリクエスト ストリームをリクエスト DTO に挿入するように指示する方法を示しています。
public class Hello : IRequiresRequestStream
{
/// <summary>
/// The raw Http Request Input Stream
/// </summary>
Stream RequestStream { get; set; }
}
ServiceStack にリクエスト DTO をデシリアライズするだけでなく、生のリクエスト本文にもアクセスさせたい場合は、ServiceStack にリクエストを読み取る前にバッファリングするように指示する必要があります。これは、PreRequestFilter を追加することで実行できます。
appHost.PreRequestFilters.Insert(0, (httpReq, httpRes) => {
httpReq.UseBufferedStream = true;
});
バッファリングされたためhttpReq.GetRawBody()
、複数回呼び出すか、から直接読み取ることができるようになりました。IHttpRequest.InputStream