Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net Web Api流媒体_C#_Asp.net_Asp.net Web Api - Fatal编程技术网

C# Asp.net Web Api流媒体

C# Asp.net Web Api流媒体,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我一直在尝试将文件流式传输到我的web服务。在我的控制器(ApiController)中,我有一个Post函数,如下所示: public void Post(Stream stream) { if (stream != null && stream.Length > 0) { _websitesContext.Files.Add(new DbFile() { Filename = Guid.NewGuid().ToString(), File

我一直在尝试将文件流式传输到我的web服务。在我的控制器(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();
    }
}
我一直在尝试通过执行以下操作,使用我的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服务时,它进入Post函数,但流总是空的。我想知道是否有人知道为什么会这样

您可以用此代码替换

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

使这类事情很容易做。建议尝试一下。

Web API没有模型绑定到“流”类型,因此您可以看到这种行为。您可以通过执行以下操作来捕获传入的请求流:request.Content.ReadAsStreamAsync()

例如:

public async Task<HttpResponseMessage> UploadFile(HttpRequestMessage request)
    {
        Stream requestStream = await request.Content.ReadAsStreamAsync();
公共异步任务上载文件(HttpRequestMessage请求)
{
Stream requestStream=wait request.Content.ReadAsStreamAsync();

注意:您甚至不需要将HttpRequestMessage作为参数,因为您始终可以通过“请求”访问此请求消息属性可通过ApicController获得。

什么是\u websitesContext?如何获取流作为操作参数?可能您应该访问请求和响应流\u websitesContext用于将条目添加到数据库中。Parv是否不可能将流作为操作参数?另外,据我所知(但我可能弄错了,或者在这里记错了)这在ASP.NET下是不容易做到的,因为ASP.NET会等待整个请求被上传,直到它调用位于该端点的任何方法/文件。RestSharp是一个客户端REST库。他正在编写REST服务器。这并不能回答他的问题。