0

我正在尝试使用这个 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字符串的值如下:

...

但是,将其用作 POST 请求有效负载中 File 字段的值会导致错误请求错误(它显示“转换错误”,因此我假设数据格式错误)。

4

1 回答 1

1

与其将字节数组转换为字符串并将其作为正文发送,不如将字节写入通过您选择的 HttpClient 发送的请求流。内容类型编码期望您将原始二进制数据作为有效负载发送,并且不知道如何处理字符串解释。

这就是为什么提琴手中的数据看起来像乱码的原因。正如您所怀疑的,它是二进制数据的文本表示。

于 2016-09-10T01:31:53.753 回答