.NET MultipartFormDataContent是否不在Content-Disposition标头中发送文件名参数?

时间:2019-10-31 19:41:40

标签: c# http-headers .net-4.5 multipartform-data

我有一个C#程序(.NET 4.5),该程序使用MultipartFormDataContent将数据发送到Web服务器。使用以下代码添加文件:

FileStream stream = new FileStream(fPath, FileMode.Open, FileAccess.Read);
content.Add(new StreamContent(stream), "file0", fPath);

此版本的MultipartFormDataContent.Add具有以下参数:

public void Add(HttpContent content, string name, string fileName);

此版本的Add方法为documented here。内容处置标头are documented here的官方MDN指令。现实:当请求到达服务器时,表单部分具有以下标头:

{'name': 'Content-Disposition', 'value': 'form-data', 'params': {}}

标题中缺少namefilename!如果我使用Add方法的两个参数版本:

FileStream stream = new FileStream(fPath, FileMode.Open, FileAccess.Read);
content.Add(new StreamContent(stream), fPath);

然后标头到达服务器,例如:

{'name': 'Content-Disposition', 'value': 'form-data', 'params': {'name': 'c:\\temp\test.txt'}}

换句话说:两个参数版本正确设置了字段的名称。这三个参数的版本不仅忘记发送filename参数,而且还蒸发了name参数。

为进行比较,这是我使用Firefox从网页发布类似的multipart / form-data时看到的内容:

{'name': 'Content-Disposition', 'value': 'form-data', 'params': {'name': 'file', 'filename': 'test.txt'}}
{'name': 'Content-Type', 'value': 'text/plain', 'params': {}}

我做错什么了吗? 这真的是.NET / C#中的错误吗?我真的需要知道服务器端的文件名,并且它必须与其他浏览器发送的其他请求兼容。因此,我不能只添加额外的标题并在那里发送文件名。它必须与其他浏览器兼容。我应该如何从C#发送文件名?

0 个答案:

没有答案