调用 ReadAsFormDataAsync 两次

VJA*_*JAI 5 c# asp.net-web-api

我面临的情况是,我必须从 ASP.NET Web API 中的传入请求读取表单数据两次(从模型绑定程序和过滤器)。我尝试过使用LoadIntoBufferAsync但没有运气。

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

// from filter
var formData = Request.Content.ReadAsFormDataAsync().Result;
Run Code Online (Sandbox Code Playgroud)

Ale*_*Gad 3

问题在于,内容的底层缓冲区是只能读取一次的只进流。

为什么需要读两遍?更多的背景知识会有所帮助。您是否正在从两个单独的过滤器中读取内容?

编辑:可能尝试直接从 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()); 
}
Run Code Online (Sandbox Code Playgroud)