当然,这里提供一个示例,展示如何为添加到 MultipartFormDataContent 的 StreamContent 或 ByteArrayContent 设置 Content-Disposition 和 Content-Type 头部。
示例代码
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 创建HttpClient实例
using (var httpClient = new HttpClient())
{
// 创建MultipartFormDataContent实例
using (var multipartContent = new MultipartFormDataContent())
{
// 添加文本内容
var stringContent = new StringContent("这是一个文本字段");
stringContent.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
multipartContent.Add(stringContent, "textFieldName");
// 添加文件流
var fileStream = new FileStream("path/to/your/file.txt", FileMode.Open);
var streamContent = new StreamContent(fileStream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "fileFieldName",
FileName = "file.txt"
};
multipartContent.Add(streamContent, "fileFieldName", "file.txt");
// 添加字节数组内容
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes("这是一个字节数组字段");
var byteArrayContent = new ByteArrayContent(byteArray);
byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
byteArrayContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "byteArrayFieldName"
};
multipartContent.Add(byteArrayContent);
try
{
// 发送POST请求
var response = await httpClient.PostAsync("http://example.com/api", multipartContent);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
}
代码解释
-
创建
HttpClient实例:using (var httpClient = new HttpClient()) -
创建
MultipartFormDataContent实例:using (var multipartContent = new MultipartFormDataContent()) -
添加文本内容:
- 创建
StringContent实例并设置其ContentType为text/plain。 - 使用
multipartContent.Add方法添加文本内容。
var stringContent = new StringContent("这是一个文本字段"); stringContent.Headers.ContentType = new MediaTypeHeaderValue("text/plain"); multipartContent.Add(stringContent, "textFieldName"); - 创建
-
添加文件流:
- 创建
FileStream实例并初始化StreamContent。 - 设置
StreamContent的ContentType为application/octet-stream。 - 设置
Content-Disposition头部,指定字段名和文件名。 - 使用
multipartContent.Add方法添加文件流。
var fileStream = new FileStream("path/to/your/file.txt", FileMode.Open); var streamContent = new StreamContent(fileStream); streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "fileFieldName", FileName = "file.txt" }; multipartContent.Add(streamContent, "fileFieldName", "file.txt"); - 创建
-
添加字节数组内容:
- 创建
ByteArrayContent实例并初始化为字节数组。 - 设置
ByteArrayContent的ContentType为application/octet-stream。 - 设置
Content-Disposition头部,指定字段名。 - 使用
multipartContent.Add方法添加字节数组内容。
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes("这是一个字节数组字段"); var byteArrayContent = new ByteArrayContent(byteArray); byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); byteArrayContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "byteArrayFieldName" }; multipartContent.Add(byteArrayContent); - 创建
-
发送 POST 请求:
- 使用
httpClient.PostAsync方法发送请求并处理响应。
var response = await httpClient.PostAsync("http://example.com/api", multipartContent); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); - 使用
注意事项
- 文件流处理:确保在发送请求后关闭文件流,这里使用了
using语句自动关闭。 - 异常处理:使用
try-catch块来捕获并处理可能的异常。 - 响应处理:确保响应成功状态后再读取响应内容。
通过这种方式,你可以为不同的内容部分设置不同的 Content-Type 和 Content-Disposition,使得服务器能够正确地解析和处理请求体中的数据。