我已经编写了我的第一个ASP.NET Core Web API服务器。路由正在运行,正在发送/接收。我想发送一个原始的Byte数组来响应Get,我想绕过任何序列化(以及我的WPF客户端中的任何反序列化)。例如,在我的服务器中:
[HttpGet("api/data")]
public Byte[] GetData()
{
Byte[] data = new Byte[]{1, 2, 3, 4, 5};
return data; // No JSON, BSON or anything else...just my array. Is it done this way?
}
在我的WPF客户端中,我想使用HttpClient类来接收数组 - 不需要反序列化:
// Assume an instantiated and initialized HttpClient object called "httpCLient"
HttpResponseMessage response = httpClient.GetAsync("/api/data").Result;
// Now what?
我已经浏览过互联网,但我还没有找到这方面的例子,而且我自己也找不到了。有人可以告诉我这是怎么做到的吗?
更新:我相信客户端Byte[]
检索可以通过" HttpContent.ReadAsByteArrayAsync()"来完成。如下所示:Convert HttpContent into byte[]。我仍然不确定如何从ASP.NET Core Web API端发送原始(未序列化的)Byte[]
。
答案 0 :(得分:4)
好的,感谢我得到的输入我有以下内容确实使用正确的值传输数组:
在服务器端(ASP.NET Core web api):
[HttpGet("/api/data")]
public async void GetData()
{
await Response.Body.WriteAsync(myByteArray, 0, myByteArray.Length);
}
在WPF客户端上我有:
HttpResponseMessage response = httpClient.GetAsync("/api/data").Result;
Byte[] data = response.Content.ReadAsByteArrayAsync().Result;
坦率地说,我不明白这是如何工作的(什么是“Response.Body.WriteAsync ...”),我不喜欢盲目地使用“只是工作所以继续”的代码。有人可以解释这是如何工作的,或者即使这是正确的方法吗?
另外,这实际上是否绕过了序列化/反序列化?我问,因为当客户端和服务器都在同一台机器(localhost)上运行时,它需要大约。 75ms来检索一个长度为4,194,304的字节[] ...这只是大约4MB,而且只是原始的字节传输看起来很慢。
答案 1 :(得分:0)
您可以在JSON对象中发送字节数组。我不确定你在问什么,但如果你正在寻找某种形式的双工通信,我会调查SignalR。
如果您想使用从多种类型的系统编写的API,我建议将字节数组打包在JSON对象中以实现互操作性。
我希望能回答你的问题!