【问题标题】:Returning byte[] data on POST request in does not return the same data I need when calling it through HttpWebRequest在 POST 请求中返回 byte[] 数据不会返回通过 HttpWebRequest 调用它时我需要的相同数据
【发布时间】:2026-02-10 04:50:01
【问题描述】:

我的 ASP.NET Core 控制器中有一个简单的 POST 方法,我通过 HttpWebRequest 调用它来演示问题。

这是我的控制器方法代码:

[HttpPost]
[Route("test")]
public byte[] Test()
{
    var resp = new byte[] {1, 2, 3};
    return resp;
}

这是我调用它的客户端代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:8080/SCVP/test");
request.Method = "POST";

WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();

using (MemoryStream ms = new MemoryStream())
{
     dataStream.CopyTo(ms);
     byte[] data = ms.ToArray();
}

问题是,当我调试时,我看到从控制器发回的 byte[] 是正确的 [1, 2, 3],但是,当我在客户端收到它时,它的长度为 6 并且字节完全不同。

我认为这可能与内容类型有关,但经过一些 Google 搜索后,似乎返回 byte[] 不需要提供特定的内容类型。

我在这里错过了什么?

编辑:我需要它是 POST,因为我正在发布数据,但为了简单起见,我在这里省略了它。我还需要返回一个字节数组。

【问题讨论】:

  • 使用 Postman 检查响应。只需验证它是否正确

标签: c# asp.net-core post asp.net-web-api httpwebrequest


【解决方案1】:

我发现了问题所在。

ASP.NET 在后台将 byte[] 转换为 Base64。因此,我收到的 byte[] 应该这样转换:

using (MemoryStream ms = new MemoryStream())
{
   dataStream.CopyTo(ms);
   byte[] data = ms.ToArray();
   byte[] originalData = 
       Convert.FromBase64String(Encoding.UTF8.GetString(data).Replace("\"", ""));
}

另外(为了避免将“\”替换为“”),我将控制器方法更改为:

[HttpPost]
[Route("test")]
public IActionResult Test()
{
   var resp = new byte[] {1, 2, 3};
   return Content(Convert.ToBase64String(resp));
}

而客户端是这样调用的:

using (MemoryStream ms = new MemoryStream())
{
   dataStream.CopyTo(ms);
   byte[] data = ms.ToArray();
   byte[] originalData = 
       Convert.FromBase64String(Encoding.UTF8.GetString(data));
}

【讨论】:

    【解决方案2】:

    你从服务器得到的响应实际上是一个 base64 编码的 JSON 响应 尝试先将其读取为字符串响应,然后将其转换回字节数组。

    using (MemoryStream ms = new MemoryStream())
    {
        dataStream.CopyTo(ms);
        ms.Position = 0;
        string rawValue = System.Text.Encoding.UTF8.GetString(ms.ToArray());
        byte[] data = Convert.FromBase64String(JsonConvert.DeserializeObject<string>(rawValue));
     }
    

    【讨论】:

      最近更新 更多