我有一个返回byte []的控制器方法。
[ActionName("testbytes")]
public byte[] GetTestBytes() {
var b = new byte[] {137, 80, 78, 71};
return b;
}
当我点击api时,我得到了以下结果。
<base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">iVBORw==</base64Binary>
当我从自定义HttpClient中点击此api时,我得到10个字节作为响应。 以下是自定义HttpClient的代码。
public async Task<byte[]> GetTestBytes() {
var uri = "apiPath/testbytes";
using (var client = new HttpClient())
{
var httpResponse = await client.GetAsync(uri, HttpCompletionOption.ResponseContentRead);
if (httpResponse.IsSuccessStatusCode) {
var bytes = await httpResponse.Content.ReadAsByteArrayAsync();
}
return bytes;
}
return null;
}
我期待4个字节,而我收到10个字节的响应。
答案 0 :(得分:2)
@Markand:当您点击API时,返回的响应将被双引号括起来(&#34; responsebodygoeshere&#34;)
所以跟随字节数组
var b = new byte [] {137,80,78,71};
序列化为&#34; iVBORw ==&#34;
因此调用httpResponse.Content.ReadAsByteArrayAsync(); 您将获得&#34; iVBORw ==&#34; (将为10个字节)的字节表示,而不是 iVBORw ==
您可以选择将响应内容作为字符串读取,然后修剪引号,然后将其转换为byte [](可能有更好的方法。:))
即。 var response = httpResponse.Content.ReadAsStringAsync().Trim('"')
然后调用以下方法来获取字节
var bytesResponse = Convert.FromBase64String(response);