C#从请求体读取PDF写入文件后空白,Postman测试方式差异问题
问题原因分析
- 你猜的没错,直接复制PDF的Raw文本内容到Postman的Raw模式发送,确实会丢失关键信息。PDF是二进制格式文件,内部包含大量无法用常规文本编码(比如UTF-8)正确表示的字节序列。当你把带
%PDF-1.7标识的PDF原始内容复制到Raw框时,Postman会默认按文本编码处理这些内容,转换过程中会把无法识别的字节替换成占位符(比如�),直接破坏了原始二进制数据,最终生成的PDF自然是空白的。 - 而Binary模式是直接上传原始二进制文件,不会经过编码转换,能完整保留PDF的所有字节,所以可以正常生成可读的PDF。
代码侧验证与修正建议
你的C#代码逻辑(读取Request.Body字节数组写入文件)本身没问题,问题出在请求发送环节。可以加个简单验证确认:
- 用Binary模式上传正常的PDF,在代码里打印读取到的字节数组长度,和原文件字节数对比,应该完全一致。
- 用Raw模式发送后,同样打印字节数组长度,会发现和原文件长度不同,这就证明数据在发送时已经损坏。
如果非要支持Raw模式发送(不推荐,毕竟PDF是二进制文件),必须确保发送端和接收端使用二进制兼容的编码(比如ISO-8859-1),但这种做法依然存在风险,因为PDF的部分字节还是可能被编码转换影响。最稳妥的方式还是始终用Binary模式上传PDF文件。
补充测试方法
可以手动对比两种模式的请求体差异:
- 用Postman控制台或Fiddler查看Binary模式的请求体,是完整的原始二进制字节流。
- 查看Raw模式的请求体,会发现部分字节已经被替换成编码兼容的字符,和原始PDF内容完全不一致。
内容的提问来源于stack exchange,提问作者Xiong Xu
相关产品推荐
相关产品推荐

