0

我需要向 Web 服务发送一个 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 库中找到如何做到这一点。

如果有人对此有解决方案,我将不胜感激。

先感谢您。

4

1 回答 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 类型,但是如果您使用 web 调试器(例如 fiddler)查看此请求,您会看到它遵循 OP 想要的确切格式。

于 2021-07-07T23:27:12.293 回答