You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中将字节数组形式的加密数据以二进制格式封装到HTTP请求中

解决C#中二进制加密数据的HTTP请求发送问题

嘿,我瞅了下你这段C#代码,发现个小问题——HttpRequestMessage.Content不能直接赋值字节数组哦,得用ByteArrayContent来包装加密后的字节数据,才能和你给的JavaScript示例实现一样的二进制请求效果。咱们来一步步调整:

核心问题修正

你原来的代码里直接把byte[]赋值给Content,但HttpRequestMessage.Content需要的是HttpContent类型的实例,ByteArrayContent就是专门用来处理字节数组的实现,能保证数据以二进制形式发送,对应JS里的processData: false和data: new Uint8Array(encrypted)。

完整的C#实现代码

结合你的JS示例,完整的代码应该是这样的:

// 假设dataToEncrypt是你要加密的原始数据(比如JSON字符串)
byte[] encryptedBytes = encryptor.Encrypt(dataToEncrypt);

// 创建POST请求,指定目标URL
HttpRequestMessage newHttpMessage = new HttpRequestMessage(HttpMethod.Post, "xyz");

// 用ByteArrayContent包装加密后的字节数组
var requestContent = new ByteArrayContent(encryptedBytes);

// 设置Content-Type请求头,和JS示例保持一致
requestContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

// 添加自定义的Ing-Plain-Content-Length头,值为原始数据的长度
requestContent.Headers.Add("Ing-Plain-Content-Length", dataToEncrypt.Length.ToString());

// 将配置好的Content赋值给请求
newHttpMessage.Content = requestContent;

关键细节说明

  • ByteArrayContent的作用:它会直接把字节数组写入请求体,不会做额外的编码或格式转换,完美匹配JS里发送Uint8Array的行为。
  • 请求头匹配:严格对应JS示例里的contentType和自定义头,确保服务端能正确识别请求格式和原始数据长度。
  • 请求方法与URL:JS用的是POST请求到"xyz",所以C#里也要明确设置HttpMethod.Post和对应的URL。

如果你的场景里需要类似JS中xhrOverride的自定义请求行为,可以通过HttpClient的HttpMessageHandler来扩展,但上面的代码已经覆盖了核心的二进制数据发送需求。

内容的提问来源于stack exchange,提问作者Matthew Watts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:38:11