Hi,
ich komme mal wieder nicht weiter.
Ich versuche aktuell einen Service zu schreiben, welcher auf POST-Request horcht.
So weit so gut. Die Entsprechende Methode, funktioniert auch wie geplant, wird also nur aufgerufen, sollte ein POST-Request gesenet werden.
Dann versuche ich die Request auszulesen und daran scheitere ich aktuell.
So hole ich mir die aktuelle Request:
HttpRequest request = HttpContext.Current.Request;
LogRequest( request );
Die Request sende ich aktuell mit Postman, einer App für Chrome.
Die Daten der Request versuche ich wie folgt auszulesen:
string header = "", form ="", param = "";
foreach(string s in request.Headers.AllKeys )
{
header += s + "=" + request.Headers[s] + System.Environment.NewLine;
}
foreach( string s in request.Form.AllKeys )
{
form += s + "=" + request.Form[s] + System.Environment.NewLine;
}
foreach( string s in request.Params.AllKeys )
{
param += s + "=" + request.Params[s] + System.Environment.NewLine;
}
Die Daten die dort enthalten sind, sind allerdings nicht die Daten, welche ich auslesen möchte.
Testweise habe ich eine Konsolenanwendung geschrieben, die mit dem HttpListener auf eine Request wartet und da konnte ich die Request auslesen:
listener.Start();
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
Stream input = request.InputStream;
StreamReader reader = new StreamReader( input, request.ContentEncoding );
string body = reader.ReadToEnd();
Dies funktioniert leider nicht, da der Stream von HttpRequest bereits gelesen wurde.
Ich hatte mal geschaut, wie man diesen Stream mehrfach lesen kann. Dabei habe ich zwei Möglichkeiten gefunden:
Diese Methode oder Eigenschaft wird nach dem Aufrufen von HttpRequest.GetBufferlessInputStream nicht unterstützt.
Hat jemand eine Idee was ich machen könnte oder habe ich einen Denkfehler/ein Verständnisproblem?
Danke schon mal im vorraus und viele Grüße
Hmm.. kenne den HttpRequest aus System.Web gerade nicht genau aber ich glaube, dass wenn Du auf die "Form"-Eigenschaft zugreifst, die den Stream bereits ließt.
Danke für die Antwort.
Auch bevor ich auf die Form-Eigenschaft zugreife wurde der Stream bereits gelesen.
Er wurde gelesen sobald ich in der Methode bin, auch wenn ich noch keinen Code aufgerufen habe.
Habe die Lösung gefunden:
Man muss der Methode einfach nur einen Stream als PArameter übergeben. Dieser Stream enthält dann die Daten.