从ASP.net MVC 4 WEB API控制器返回byte []

时间:2015-03-18 12:42:32

标签: c# asp.net-mvc-4 asp.net-web-api

我有一个返回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个字节的响应。

1 个答案:

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