我有一个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': {}}
标题中缺少name
和filename
!如果我使用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#发送文件名?