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);