我编写了我的第一个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 [].
我创建了一个Controller和方法,用于从API获取数据.我HttpResponseMessage用来得到回应.一切正常,但我无法获得我想要的JSON格式的确切数据.
方法如下所示:
public class TestController : ApiController
{
[HttpGet]
public async Task<IHttpActionResult> TestMethod(...)
{
string _apiUrl = String.Format("...");
string _baseAddress = "...";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(_apiUrl);
if (response.IsSuccessStatusCode)
{
return Json(response);
}
}
return NotFound();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的回应如下:
{
"Version": {
"Major": 1,
"Minor": 1,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
"Content": {
"Headers": [
{
"Key": "Content-Length",
"Value": [ …Run Code Online (Sandbox Code Playgroud) 有时我会从几个网站得到一些乱码回复.
这是我的代码:
Stream responseStream = response.GetResponseStream();
buffer = new Byte[256];//
int bytesRead;
while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, bytesRead);
//resp=resp+ .UTF8.GetString(buffer, 0, bytesRead);
resp=resp + Encoding.ASCII.GetString(buffer); //resp is string
}
Run Code Online (Sandbox Code Playgroud)
当我从www.google.co.in请求时,我在resp字符串中得到以下字符:
?\ B\0\0\0\0\0ερ}ÿ·F ?????????Ž?????? {7米??? OX吗?\ r?ÿ??? 33 ?? d; Y ???? N 0?
我该如何克服这个问题?它与编码有关吗?