如何使用ASP.NET Core Web API传输/接收原始字节数组?

LKe*_*ene 7 c# asp.net-core

我编写了我的第一个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?
}
Run Code Online (Sandbox Code Playgroud)

在我的WPF客户端中,我想使用HttpClient类来接收数组 - 不需要反序列化:

// Assume an instantiated and initialized HttpClient object called "httpCLient"
HttpResponseMessage response = httpClient.GetAsync("/api/data").Result;
// Now what?
Run Code Online (Sandbox Code Playgroud)

我已经浏览了互联网,但我没有找到这方面的例子,而且我一直无法弄清楚.有人可以告诉我这是怎么做到的吗?

更新:我相信客户端Byte []检索可以通过"HttpContent.ReadAsByteArrayAsync()"完成,如下所示:将HttpContent转换为byte [].我仍然不确定如何从ASP.NET Core Web API端发送原始(未序列化)Byte [].

LKe*_*ene 7

好的,多亏了我得到的输入,我有以下内容确实使用正确的值传输了数组:

在服务器端(ASP.NET Core web api):

[HttpGet("/api/data")]
public async void GetData()
{
    await Response.Body.WriteAsync(myByteArray, 0, myByteArray.Length);
}
Run Code Online (Sandbox Code Playgroud)

在 WPF 客户端上,我有:

HttpResponseMessage response = httpClient.GetAsync("/api/data").Result;
Byte[] data = response.Content.ReadAsByteArrayAsync().Result;
Run Code Online (Sandbox Code Playgroud)

坦率地说,我不明白这是如何工作的(什么是“Response.Body.WriteAsync...”),而且我不喜欢盲目地使用“正常工作所以继续前进”的代码。有人可以解释一下这是如何工作的,或者即使这是正确的方法?

另外,这实际上是绕过序列化/反序列化吗?我问是因为当客户端和服务器都在同一台机器(本地主机)上运行时,它需要大约。检索长度为 4,194,304 的字节 [] 需要 75 毫秒……只有大约 4MB,对于原始字节传输来说似乎很慢。

  • 你如何做相反的事情:将原始字节数组发布到服务器? (2认同)

Col*_*aws -2

您可以在 JSON 对象中发送字节数组。我不太确定你在问什么,但如果你正在寻找某种形式的双工通信,我会研究 SignalR。

如果您想使用从多种类型的系统编写的 API,我建议将字节数组打包在 JSON 对象中以实现互操作性。

我希望这回答了你的问题!