.net - WebApi 传输字节数组为空

标签 .net http asp.net-web-api

我有一个发送字节数组的简单客户端:

var content = new ByteArrayContent(wav);
httpClient.PostAsync(@"http://localhost:12080/api/values", content);

和一个接收发布请求的简单服务器:

[HttpPost]
    public string Post([FromBody]byte[] parms)
    {
        //bla bla
    }

问题是我将 null 作为传入参数。

您知道问题出在哪里吗?

最佳答案

当您将参数放入 Action 方法时,您是在暗示您希望其中一个格式化程序“序列化/反序列化”CLR 对象。我很确定您不希望将字节数组序列化为 XML 或 JSON。我猜您的字符串响应也是如此。

对于像流、字符串和字节数组这样的原语,你只需这样做,

[HttpPost]
public async Task<HttpResponseMessage> Post()
{
    byte[] parms = await Request.Content.ReadAsByteArray();

    return new HttpResponseMessage { Content=StringContent("my text/plain response") }
}

不幸的是,因为Content.ReadAsXXX方法都是异步的,所以需要让Action方法返回一个Task。您确实需要避免在任何可能托管在 ASP.NET 管道下的 Web API 中使用 .Result 和 .Wait,因为这会导致死锁。

关于.net - WebApi 传输字节数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22727848/

相关文章:

c# - 如何从 Expression<Func<T>> 构建 Expression<Func<T,bool>>

eclipse - Workday Studio - 向供应商 API 发出的 HTTP 请求接收错误 : No bean named 'http-token-auth' is defined

c# - 将 Web API 和 API 文档添加到现有 MVC 项目

c# - 寻找数据访问层保护建议

c# - PKCS11证书

http - 判断是否有人在直接访问我的 HTTP 资源?

http - 逗号是 cookie-value 中的有效字符吗

c# - 如何强制 WebAPI OData 扩展子句?

odata - 从 .NET OData 4 客户端调用嵌套 Expand() 的正确方法

.net - .Net 3.5 中的 Rx 不是异步的?