Asp.net Web Api Streaming

TBD*_*TBD 2 c# asp.net asp.net-web-api

我一直在尝试将文件流式传输到我的Web服务.在我的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用我的Web客户端流式传输文件,方法如下:

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();
}
Run Code Online (Sandbox Code Playgroud)

现在,当我调试我的Web服务时,它进入Post函数,但stream始终为null.想知道是否有人可能知道为什么会这样?

Kir*_*lla 5

Web API不会将绑定模型绑定到"Stream"类型,因此您会看到该行为.您可以通过执行以下操作来捕获传入的请求流:Request.Content.ReadAsStreamAsync()

例:

public async Task<HttpResponseMessage> UploadFile(HttpRequestMessage request)
    {
        Stream requestStream = await request.Content.ReadAsStreamAsync();
Run Code Online (Sandbox Code Playgroud)

注意:您甚至不需要将HttpRequestMessage作为参数,因为您始终可以通过ApiController提供的"Request"属性访问此请求消息.