RestSharp上传CSV文件时请求头顺序及Content-Type控制问题
RestSharp POST CSV文件时调整多部分表单头顺序
方法1:手动构建多部分请求内容
直接绕过RestSharp的默认表单处理逻辑,自己拼接请求体,完全控制头的顺序:
var client = new RestClient("你的目标API地址"); var request = new RestRequest("", Method.Post); // 设定主请求的Content-Type,自定义边界值 var boundary = "my-custom-boundary-123"; request.AddHeader("Content-Type", $"multipart/form-data; boundary={boundary}"); // 拼接多部分请求内容 var contentBuilder = new StringBuilder(); contentBuilder.AppendLine($"--{boundary}"); // 优先添加服务器要求的Content-Disposition contentBuilder.AppendLine($"Content-Disposition: form-data; name=\"File\"; filename=\"test.csv\""); // 不需要Content-Type就删掉下面这行 contentBuilder.AppendLine($"Content-Type: text/csv"); contentBuilder.AppendLine(); // 写入CSV内容 contentBuilder.AppendLine("\"My\",\"CSV\",\"ETC\""); // 添加上结束边界 contentBuilder.AppendLine($"--{boundary}--"); // 将拼接好的内容作为请求体发送 request.AddParameter("multipart/form-data", contentBuilder.ToString(), ParameterType.RequestBody); var response = client.Execute(request);
方法2:用自定义MultipartFormDataContent控制顺序
借助.NET自带的MultipartFormDataContent构建内容,手动指定头的添加顺序:
var client = new RestClient("你的目标API地址"); var request = new RestRequest("", Method.Post); // 读取本地CSV文件的字节内容 var fileBytes = File.ReadAllBytes("你的文件路径.csv"); var multipartContent = new MultipartFormDataContent("my-custom-boundary-456"); var fileContent = new ByteArrayContent(fileBytes); // 先设置Content-Disposition头 fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "\"File\"", FileName = "\"test.csv\"" }; // 再设置Content-Type头(不需要则删除该行) fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("text/csv"); multipartContent.Add(fileContent); // 将自定义的多部分内容赋值给请求 request.AddParameter("multipart/form-data", multipartContent, ParameterType.RequestBody); var response = client.Execute(request);
方法3:降级到旧版RestSharp
如果确认旧版本(比如v106.x系列)没有这个头顺序问题,直接降级RestSharp的NuGet包,就能恢复默认的Content-Disposition在前的顺序,无需修改代码。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

