Ich implementiere eine REST-API mit ASP.NET MVC, und ein kleines Stolperstein ist in der Form der Expect: 100-continue
Anfrage Header für Anfragen mit ein Postkörper.Unterstützen die "Expect: 100-continue" -Header mit ASP.NET MVC
RFC 2616 besagt, dass:
Upon receiving a request which includes an Expect request-header field with the "100-continue" expectation, an origin server MUST either respond with 100 (Continue) status and continue to read from the input stream, or respond with a final status code. The origin server MUST NOT wait for the request body before sending the 100 (Continue) response. If it responds with a final status code, it MAY close the transport connection or it MAY continue to read and discard the rest of the request. It MUST NOT perform the requested method if it returns a final status code.
Das klingt für mich wie ich zwei Antworten auf die Anfrage machen muß, also muss es sofort ein HTTP-100-Antwort weiter senden, und dann weiter von der Lese Original-Anfrage-Stream (zB HttpContext.Request.InputStream
) ohne die Anfrage zu beenden, und dann den resultierenden Status-Code zu senden (aus Gründen des Arguments, sagen wir, es ist ein 204 Kein Inhalt-Ergebnis). So
, Fragen sind:
- Bin ich die Spezifikation richtig zu lesen, dass ich zwei Antworten auf eine Anfrage machen müssen?
- Wie kann dies in ASP.NET MVC getan werden?
w.r.t. (2) Ich habe versucht, den folgenden Code verwenden, bevor Sie fortfahren den Eingangsstrom zu lesen ...
HttpContext.Response.StatusCode = 100;
HttpContext.Response.Flush();
HttpContext.Response.Clear();
... aber wenn ich versuche, die endgültige 204-Statuscode zu setzen erhalte ich die Fehlermeldung:
System.Web.HttpException: Server cannot set status after HTTP headers have been sent.
Nein - ich möchte es vermeiden! Ich wusste nicht, dass IIS ohne jegliche Intervention damit umgehen würde. –
Ich habe einen Fehler in 'WebRequest' mit 100 Continue festgestellt. Das ist ein guter Grund, es nicht zu benutzen. http://regis.decamps.info/blog/2010/12/c-bug-in-webrequest/ – rds