c# - Asp.net Web Api 流

标签 c# asp.net asp.net-web-api

我一直在尝试将文件流式传输到我的网络服务。在我的 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/

相关文章:

c# - linq 的优化或替代(用于聚合)C#

C# List<object> AddRange of DBNull.Value

c# - ASP.NET 有没有办法获取所有单例?

asp.net - 基于 GIT 的 asp.net Web 应用程序无法部署到 Azure,并出现 typescript 编译错误

c# - 在 WebApi 2 中检测到属性的自引用循环

c# - 如何创建 SafeArray C#?

c# - Facebook 注册 : Decoding the signed_request

javascript - 客户端 javaScript 来切换回发时反转的下拉列表效果?

asp.net-mvc-4 - ASP.Net MVC + Web Api + AngularJs 中的页面重定向

asp.net-web-api - 使用 Active Directory 的 ASP.NET Web Api 安全性