C#和MIME多部分消息创建

时间:2012-02-14 16:57:58

标签: c# mime-message

我需要向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库中找到如何做到这一点。

如果有人有解决方案,我会很感激。

提前谢谢。

2 个答案:

答案 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通缉。