我需要向Web Service发送一个POST请求,其主体表示为“multipart / form-data”内容类型。
身体样本如下:
Content-Type:multipart/form-data; boundary=WebBoundary
--WebBoundary
Content-Disposition: form-data; name="Key#1"
Value#1
--WebBoundary
Content-Disposition: form-data; name="Key#2"
Value#2
--WebBoundary
Content-Disposition: form-data; name="FileKey"; filename="file.jpg"
Content-Type: image/png
--WebBoundary--
如何使用HttpWebRequest为此用例构造MIME消息? 我也想定制我发送的数据。例如,首先我发送3个键,其中2个键是字符串,一个是图像,其他时间我想发送5个图像类型的键。 无论如何,我没有在.NET库中找到如何做到这一点。
如果有人有解决方案,我会很感激。
提前谢谢。
答案 0 :(得分:1)
最后,我必须自己做出解决方案。以下文章对我有所帮助: http://www.paraesthesia.com/archive/2009/12/16/posting-multipartform-data-using-.net-webrequest.aspx
答案 1 :(得分:0)
9 年后,在 .NET Core 3.11 及更高版本的时代,任何人都可以使用以下 C# 代码实现原始海报想要的:
namespace UploadTester
{
class Program
{
static async Task Main(string[] args)
{
var client = new HttpClient();
Stream fileStream = new FileStream("P:\\testytesty\\test1.pdf", FileMode.Open);
var FormData = new MultipartFormDataContent();
var payloadData = new Dictionary<string, string>();
payloadData.Add("AttachmentKey", "4567");
payloadData.Add("FileName", "test1.pdf");
payloadData.Add("Notes", String.Empty);
payloadData.Add("UploadedBy", "UploadPerson");
payloadData.Add("UploadDate", DateTime.UtcNow.ToShortDateString());
payloadData.Add("Compressed", "false");
payloadData.Add("DocType", "1");
foreach(var payloadItem in payloadData)
{
FormData.Add(new StringContent(payloadItem.Value), payloadItem.Key);
}
FormData.Add(new StreamContent(fileStream), "AttachmentFile", "test1.pdf");
var request = new HttpRequestMessage(HttpMethod.Post, "http://The-url-of your-post/accepter/goes-here");
request.Headers.Add("accept", "application/json");
request.Content = FormData;
var response = await client.SendAsync(request);
}
}
}
它对我来说是一个控制台模式的程序,因为我用它来测试我的 API,而不是每次都启动整个客户端应用程序。
但是应该很容易从中提取核心,并将其插入到类中的方法中。
不过,我还没有弄清楚如何为正在上传的文件设置 MIME 类型,但是如果您使用网络调试器(例如 fiddler)查看正在进行的请求,您会看到它遵循确切的格式OP通缉。