POST請求上傳:用戶名(string)、圖片(byte[])、文件名(string)到WebService。
using (var client = new HttpClient()) {
using (var content = new MultipartFormDataContent()) {
// 字符串字段
content.Add(new StringContent(username), "username");
content.Add(new StringContent(filename), "filename");
// 二進制文件
var fileContent = new ByteArrayContent(imageBytes);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
content.Add(fileContent, "image", filename); // 參數名、文件名
// 發送請求
HttpResponseMessage response = await client.PostAsync("https://www.csdn.com/PleaseHelpMe", content);
string result = await response.Content.ReadAsStringAsync();
}
}
boundary,構建符合RFC 7578標準的請求體。byte[],設置Content-Type(如image/jpeg、application/octet-stream)。Add(content, name, filename)重載指定Content-Disposition: form-data; name="image"; filename="xxx.jpg"。[FromForm] string username, [FromForm] IFormFile image。@RequestParam("username") String username, @RequestParam("image") MultipartFile image。$_POST['username'], $_FILES['image']。var json = new {
username = username,
filename = filename,
imageBase64 = Convert.ToBase64String(imageBytes)
};
var jsonContent = new StringContent(JsonConvert.SerializeObject(json), Encoding.UTF8, "application/json");
await client.PostAsync(url, jsonContent);
缺點:體積膨脹33%、解碼耗CPU、非流式傳輸。
HttpClientHandler代理到Fiddler:new HttpClientHandler { Proxy = new WebProxy("127.0.0.1", 8888) }。