如何解决.NET集成Jira添加附件时的UnsupportedMediaType错误?
解决Jira .NET集成添加附件时的UnsupportedMediaType错误
问题根源
你手动给AddFile方法指定了multipart/form-data作为单个文件的Content-Type,这是错误的——multipart/form-data是整个请求的Content-Type,而非单个文件的类型。同时,手动指定该值会干扰RestSharp自动生成正确的请求边界和内容格式,导致Jira服务器无法识别请求类型。
修复方案
方案1:直接传入文件路径(推荐)
让RestSharp自动处理文件的MIME类型和请求格式:
public async Task AddAttachmentAsync(string issueKey, string filePath) { try { var request = new RestRequest($"/rest/api/3/issue/{issueKey}/attachments", Method.Post); request.AddHeader("X-Atlassian-Token", "nocheck"); // 直接传入文件路径,RestSharp会自动获取正确的MIME类型 request.AddFile("file", filePath); var response = await _client.ExecuteAsync(request); if (!response.IsSuccessful) { throw new Exception($"Error adding attachment: {response.StatusCode} - {response.Content}"); } } catch (Exception ex) { throw ex; } }
方案2:使用字节数组时指定正确的文件MIME类型
如果必须使用字节数组,需替换multipart/form-data为文件实际的MIME类型(比如PDF用application/pdf,图片用image/png):
public async Task AddAttachmentAsync(string issueKey, string filePath) { try { var fileData = File.ReadAllBytes(filePath); var fileName = Path.GetFileName(filePath); // 根据文件类型设置正确的MIME类型,这里以PDF为例 var mimeType = "application/pdf"; var request = new RestRequest($"/rest/api/3/issue/{issueKey}/attachments", Method.Post); request.AddHeader("X-Atlassian-Token", "nocheck"); request.AddFile("file", fileData, fileName, mimeType); var response = await _client.ExecuteAsync(request); if (!response.IsSuccessful) { throw new Exception($"Error adding attachment: {response.StatusCode} - {response.Content}"); } } catch (Exception ex) { throw ex; } }
额外检查项
- 确保使用的RestSharp是最新版本,旧版本在multipart请求处理上可能存在兼容性问题。
- 不要手动添加
Content-Type: multipart/form-data请求头,RestSharp会自动生成包含边界值的正确请求头。
内容的提问来源于stack exchange,提问作者Alejandro Vexler
相关产品推荐
相关产品推荐

