2016-04-12 2 views
0

Ich versuche, die Rohdaten meines ServiceStack Webservice mit servicerunner zu schreiben. Dies funktioniert für SOAP-Anforderungen, aber für die REST-Anforderung wird GetRawBody() leer zurückgegeben.GetRawBody() ist leer für REST-Anfragen

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

Was ist die eigentliche HTTP-Verb Sie verwenden - GET? POST? REST ist ein Architekturstil, kein definiertes Protokoll. Siehe auch: http://stackoverflow.com/questions/17514754/can-servicestack-runner-get-request-body – PatrickSteele

Antwort

1

von Standard-Web-Server nur ein Vorwärts-Stream-Anforderung, die Sie ServiceStack sagen kann Deserialisierung zu überspringen, so dass Sie von der Anfrage-Stream von implementing IRequiresRequestStream on your Request DTO lesen:

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

, die die Anforderung injizieren streamen statt den Antrag von deserialisieren DTO, zB:

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

Andernfalls, wenn Sie ServiceStack wollen die Anfrage an deserialisieren und Sie möchten von der Anfrage Körper selbst Sie müssen später wieder lesen eine Vorbitte Filter sagen ServiceStack zu buffer the Request mit:

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