利用Multipart/form-data类型消息和MIME解码器
var message = Message.CreateMessage(MessageVersion.Default, "action", new MyObject()); message.Headers.ContentType = new System.Net.Mime.ContentType("multipart/form-data; boundary=" + Guid.NewGuid().ToString());
// Add parts here var part = new System.ServiceModel.Channels.MessagePart();
var content = new System.Net.Http.StringContent("your string here"); part.Content = new StreamBodyPart(content.ReadAsStreamAsync().Result); part.Headers.Add("Content-Disposition", "form-data; name="part1"");
message = message.CreateBufferedCopy(int.MaxValue).CreateMessage();
message.Headers.To = new Uri("http://endpoint"); var client = new HttpClient(); using (var response = client.PostAsync(message.Headers.To, new StreamContent(new MemoryStream(message.ToByteArray()))).Result) if (response.IsSuccessStatusCode) { // Response }
利用添加 MultipartContent 类型的部件
var client = new HttpClient();
// Create a multipart content object with a unique boundary var content = new MultipartContent("related"); content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("boundary", "myBoundary"));
var streamContent = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes("String to include in the request")));
// Add the stream content as a binary part content.Add(new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes("String to include in the request"))), "stringPartName", "stringFileName.txt");
// Make the request using (var response = client.PostAsync(httpClient.BaseAddress, content).Result) { response.EnsureSuccessStatusCode(); // Read the response }