Return byte[] 来自 ASP.net MVC 4 WEB API 控制器
Return byte[] from ASP.net MVC 4 WEB API controller
我有一个控制器方法 returns 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 = new byte[] {137, 80, 78, 71};
序列化为"iVBORw=="
由于调用 httpResponse.Content.ReadAsByteArrayAsync();
您将获得 "iVBORw==" 的字节表示(这将是 10 个字节)而不是 iVBORw==
您可以选择将响应内容读取为字符串,然后 trim 引号,然后将其转换为 byte[](可能有更好的方法。:))
即var response = httpResponse.Content.ReadAsStringAsync().Trim('"')
然后调用以下方法获取字节
var bytesResponse = Convert.FromBase64String(response);
我有一个控制器方法 returns 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 = new byte[] {137, 80, 78, 71};
序列化为"iVBORw=="
由于调用 httpResponse.Content.ReadAsByteArrayAsync(); 您将获得 "iVBORw==" 的字节表示(这将是 10 个字节)而不是 iVBORw==
您可以选择将响应内容读取为字符串,然后 trim 引号,然后将其转换为 byte[](可能有更好的方法。:))
即var response = httpResponse.Content.ReadAsStringAsync().Trim('"')
然后调用以下方法获取字节
var bytesResponse = Convert.FromBase64String(response);