Asp.net网页API流(Asp.net Web Api Streaming)

2019-09-22 05:05发布

我一直在试图流的文件到我的web服务。 在我的控制器(ApiController)我有一个帖子功能如下:

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();
    }
}

我一直在试图流的文件通过执行以下操作我的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();
}

现在,当我调试我的Web服务,它进入邮政的功能,但流始终为空。 想知道是否有人可以有一个想法,为什么发生这种情况?

Answer 1:

网络API不绑定模式,“流”型,因此,你所看到的行为。 你可以这样做,而不是捕捉传入的请求流:Request.Content.ReadAsStreamAsync()

例:

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

注意:您甚至不需要有HttpRequestMessage作为参数,你总是可以通过通过ApiController“请求”可用属性访问此请求消息。



Answer 2:

您可以使用此代码替换

var uri = new Uri(GetFileServiceUrl());
Stream postStream = myWebClient.OpenWrite(uri.AbsoluteUri, "POST");


Answer 3:

RestSharp使得这种东西很容易做到。 建议尝试一下。



文章来源: Asp.net Web Api Streaming