我一直在尝试将文件流式传输到我的网络服务。在我的 Controller (ApiController)中,我有一个 Post 函数,如下所示:
public void Post(Stream stream)
{
if (stream != null && stream.Length > 0)
{
_websitesContext.Files.Add(new DbFile() { Filename = Guid.NewGuid().ToString(), FileBytes= ToBytes(stream) });
_websitesContext.SaveChanges();
}
}
我一直在尝试通过执行以下操作使用我的网络客户端流式传输文件:
public void UploadFileStream(HttpPostedFileBase file)
{
WebClient myWebClient = new WebClient();
Stream postStream = myWebClient.OpenWrite(GetFileServiceUrl(), "POST");
var buffer = ToBytes(file.InputStream);
postStream.Write(buffer, 0,buffer.Length);
postStream.Close();
}
现在,当我调试 Web 服务时,它会进入 Post 函数,但流始终为空。想知道是否有人知道为什么会发生这种情况?
最佳答案
Web API 不会对绑定(bind)到“Stream”类型进行建模,因此您会看到这种行为。您可以通过执行以下操作来捕获传入请求流:Request.Content.ReadAsStreamAsync()
示例:
public async Task<HttpResponseMessage> UploadFile(HttpRequestMessage request)
{
Stream requestStream = await request.Content.ReadAsStreamAsync();
注意:您甚至不需要将 HttpRequestMessage 作为参数,因为您始终可以通过 ApiController 提供的“Request”属性访问此请求消息。
关于c# - Asp.net Web Api 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12314816/