调用Imgur API上传图片返回400 Bad Request错误如何解决
问题原因
- 错误地将
Content-Type请求头添加到了HttpClient的全局默认请求头中,该头属于请求内容的专属头,放在全局头会导致请求格式不符合Imgur接口预期 - 直接使用
ByteArrayContent时没有显式为内容指定正确的媒体类型,接口无法正确识别传入的二进制流是图片数据 - 每次请求都实例化新的
HttpClient会造成套接字资源浪费,也可能引发请求异常
修正后的代码
// 将HttpClient声明为静态全局变量,避免重复实例化的性能和资源问题 private static readonly HttpClient _httpClient = new HttpClient(); private async Task Upload() { var openfiledialog = new OpenFileDialog(); openfiledialog.Filter = "Image files (*.png) | *.png"; if (openfiledialog.ShowDialog() == DialogResult.OK) { using (var stream = openfiledialog.OpenFile()) { byte[] imageBytes = new byte[stream.Length]; stream.Read(imageBytes, 0, imageBytes.Length); // 仅在全局头配置Authorization验证信息 _httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Client-ID", "替换为你自己的Client-ID值"); // 为请求内容单独设置Content-Type头 var content = new ByteArrayContent(imageBytes); content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); var response = await _httpClient.PostAsync("https://api.imgur.com/3/upload", content); // 如需排查问题可读取响应原文 // var responseMsg = await response.Content.ReadAsStringAsync(); } } }
内容的提问来源于stack exchange,提问作者Jacko
相关产品推荐
相关产品推荐

