Laden...

[gelöst] HttpRequest Stream mehrfach lesen

Erstellt von kunsti vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.752 Views
K
kunsti Themenstarter:in
89 Beiträge seit 2013
vor 9 Jahren
[gelöst] HttpRequest Stream mehrfach lesen

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:

  1. Setzte die Position zurück --> wirft allerdings eine HttpException : > Fehlermeldung:

Diese Methode oder Eigenschaft wird nach dem Aufrufen von HttpRequest.GetBufferlessInputStream nicht unterstützt.

  1. Kopiere den Stream vor dem Lesen in einen MemoryStream --> Sobald ich die Methode erreiche ist der Stream aber schon gelesen, was ich mit "ReadEntityBodyMode" bereits geprüft habe.

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

2.760 Beiträge seit 2006
vor 9 Jahren

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.

K
kunsti Themenstarter:in
89 Beiträge seit 2013
vor 9 Jahren

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.