4

ASP.NET Web API の着信要求からフォーム データを 2 回 (モデル バインダーとフィルターから) 読み取らなければならない状況に直面しています。使用してみましLoadIntoBufferAsyncたが、運がありません。

// from model binder
Request.Content.LoadIntoBufferAsync().Wait();
var formData = Request.Content.ReadAsFormDataAsync().Result;

// from filter
var formData = Request.Content.ReadAsFormDataAsync().Result;
4

3 に答える 3

2

問題は、コンテンツの基礎となるバッファーが、1 回しか読み取れない順方向専用ストリームであることです。

なぜ二度読む必要があるのですか?もう少しコンテキストが役立ちます。2 つの別々のフィルターから読み取っているということですか?

編集: MS_HttpContext から直接読み取って、それをコンテンツ ストリームとして使用しようとする場合があります (これが自己ホスト環境で機能するとは思わないでください)。

using (var s = new System.IO.MemoryStream()) {   
  var ctx = (HttpContextBase)actionContext.Request.Properties["MS_HttpContext"];  
  ctx.Request.InputStream.Seek(0, System.IO.SeekOrigin.Begin);  
  ctx.Request.InputStream.CopyTo(s);   var body =
  System.Text.Encoding.UTF8.GetString(s.ToArray()); 
}
于 2013-08-27T11:26:34.813 に答える