私は ASP.NET MVC を使用して REST API を実装していExpect: 100-continue
ますが、投稿本文を含む要求の要求ヘッダーの形で小さな障害が発生しました。
RFC 2616は次のように述べています。
「100-continue」期待値を持つ Expect リクエスト ヘッダー フィールドを含むリクエストを受信すると、オリジン サーバーは 100 (Continue) ステータスで応答して入力ストリームからの読み取りを続行するか、最終ステータス コードで応答する必要があります。オリジン サーバーは、100 (Continue) 応答を送信する前に、要求本文を待機してはなりません。最終ステータス コードで応答する場合、トランスポート接続を閉じるか、残りの要求を読み込んで破棄し続けることができます。最終ステータス コードを返す場合、要求されたメソッドを実行してはなりません。
これは、リクエストに対して2 つの応答を行う必要があるように思えます。つまり、すぐに HTTP 100 Continue 応答を送信してから、HttpContext.Request.InputStream
要求を終了せずに元の要求ストリーム (つまり ) から読み取りを続行し、最後に結果を送信する必要があります。ステータス コード (議論のために、それが 204 No Content の結果であるとしましょう)。
したがって、質問は次のとおりです。
- 要求に対して 2 つの応答を行う必要があるという仕様を正しく読んでいますか?
- ASP.NET MVC でこれを行うにはどうすればよいですか?
wrt (2) 入力ストリームの読み取りに進む前に、次のコードを使用してみました...
HttpContext.Response.StatusCode = 100;
HttpContext.Response.Flush();
HttpContext.Response.Clear();
...しかし、最終的な 204 ステータス コードを設定しようとすると、エラーが発生します。
System.Web.HttpException: HTTP ヘッダーが送信された後、サーバーは状態を設定できません。