我有一个发送字节数组的简单客户端:
var content = new ByteArrayContent(wav);
httpClient.PostAsync(@"http://localhost:12080/api/values", content);
和一个接收该帖子请求的简单服务器:
[HttpPost]
public string Post([FromBody]byte[] parms)
{
//bla bla
}
问题是我将null
作为传入参数。
你知道可能出现什么问题吗?
答案 0 :(得分:9)
当您在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,因为这会导致死锁。