我正在尝试使用this API,它可以在不同格式之间转换文件。作为请求的一部分,它希望文件采用二进制格式。我想弄清楚C#到底意味着什么。我读过的所有内容都指向使用字节数组,但到目前为止还没有用。
基本上,我需要将文档转换为二进制文件,然后使用该原始数据并将其插入系统的另一部分,该部分负责发送实际的POST请求。
为了更好地理解API,我测试了端点并查看了请求有效负载。 Chrome不会显示作为“文件”字段的一部分发送的原始数据:
Fiddler确实如此,但这是胡言乱语(可能是因为它试图将字节解释为ASCII):
所以我有点困惑。出于请求有效负载中的表单数据对象的目的,我需要对C#中的文件做些什么?我试过这个(我正在使用该系统的API从另一个系统访问该文件):
DocumentInfo di = this.BoundEntryInfo as DocumentInfo;
string contentType = "application/msword";
string binaryValue;
using (DocstarReadStream filestream = di.ReadDoc(out contentType)) //open a stream to the word document in the other system
{
using (MemoryStream mstream = new MemoryStream())
{
filestream.CopyTo(mstream);
binaryValue = string.Join("", mstream.ToArray());
}
}
生成的binaryValue
字符串的值如下:
... 807534200608000330223164210108901003250019082916711111011610111011695841211121011159346120109108321624240160020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018014820311019448166924714925015145183859823216217042213962150458223372412328625314619918825419019
但是,使用此作为POST请求有效内容中的文件字段的值会导致错误请求错误(它表示“转换错误”,因此我假设数据的格式错误以某种方式)。
答案 0 :(得分:1)
您应该将字节写入通过您选择的HttpClient发送的请求流,而不是将字节数组转换为字符串并将其作为正文发送。内容类型编码期望您作为有效负载发送原始二进制数据,并且不知道如何处理字符串解释。
这就是为什么fiddler中的数据看起来像胡言乱语。正如您所怀疑的那样,它是二进制数据的文本表示。