2016-04-12 6 views
0

servicerunnerを使用して、私のServiceStack WebサービスのRawデータを書き込もうとしています。これはSOAPリクエストに対して機能していますが、RESTリクエストではGetRawBody()が空に戻ります。リクエストを注入しますGetRawBody()はRESTリクエストで空に戻ります

public class MyRequest : IRequiresRequestStream 
{ 
    Stream RequestStream { get; set; } 
} 

を:デフォルトのWebサーバで

public override void BeforeEachRequest(IRequest requestContext, T request) 
    { 
     Logger.Write(requestContext.GetRawBody()); 
    } 
+0

使用している実際のHTTP動詞何ですか - GET?役職? RESTはアーキテクチャスタイルであり、定義されたプロトコルではありません。また、参照してください:http://stackoverflow.com/questions/17514754/can-servicestack-runner-get-request-body – PatrickSteele

答えて

1

だけあなたがimplementing IRequiresRequestStream on your Request DTOによって要求ストリームから読み取ることができるように前進のみあなたは、逆シリアル化をスキップするServiceStackを伝えることができるストリームを要求提供例えば、リクエストDTOをデシリアライズするのではなく、ストリーム:

public class object Any(MyRequest request) 
{ 
    var requestBody = request.RequestStream.ReadFully().FromUtf8Bytes(); 
} 

そうでなければあなたはServiceStack要求をデシリアライズしたいとあなたがしたい場合は再読み込みリクエストボディからは、後で自分より前の要求フィルターを使用してbuffer the RequestにServiceStackを伝える必要があります:

appHost.PreRequestFilters.Add((httpReq, httpRes) => { 
    httpReq.UseBufferedStream = true; 
});