2017-04-06 44 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

相關問題