2017-04-06 39 views
4

我写了我的第一个ASP.NET Core Web API服务器。路由正在工作,并且正在发送/接收。我想发送一个原始的Byte数组来响应Get,我想绕过任何序列化(以及我的WPF客户端中的任何反序列化)。举例来说,在我的服务器:如何使用ASP.NET Core Web API发送/接收原始字节数组?

[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

可能重复的[从HttpResponseMessage获取内容/消息](http://stackoverflow.com/questions/15936180/getting-content-message-from-httpresponsemessage) –

+0

感谢科林。我认为在客户端,我可以通过以下方式检索字节[]: 字节[] data = httpResponseMessage.Content.ReadAsByteArrayAsync()。 但是,我无法测试这个,因为我仍然不确定如何从服务器发送原始字节[]。 – LKeene

+0

http://stackoverflow.com/questions/23884182/how-to-get-byte-array-properly-from-an-web-api-method-in-c检查Luaan的答案。使用ByteArrayContent –

回答

0

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

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

我希望能回答你的问题!

+0

对不起,我刚刚在代码中注意到你的评论,说没有JSON! –

1

好了,感谢我得到我有确实的阵列与正确的价值观传输以下输入:

在服务器端(ASP.NET核心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 ......”),我不喜欢盲目使用代码“只是这样工作继续”。有人可以解释这是如何工作的,或者即使这是正确的方法?

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

+1

你如何做相反的事情:将一个原始字节数组发布到服务器上? – Shimmy

相关问题