我有一个控制器方法,它返回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个字节。
@Markand:点击API时,返回的响应将用双引号引起来(“ responsebodygoeshere”)
所以下面的字节数组
var b =新字节[] {137,80,78,71};
被序列化为“ iVBORw ==“
因此,在调用httpResponse.Content.ReadAsByteArrayAsync();时,您将获得“ iVBORw ==”的字节表示形式(这将是10个字节),而不是iVBORw ==
(可选)您可以将响应内容读取为字符串,然后修剪引号,然后将其转换为byte [](可能会有更好的方法。
IE var response = httpResponse.Content.ReadAsStringAsync().Trim('"')
然后调用以下方法获取字节
var bytesResponse = Convert.FromBase64String(response);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句