RestSharp 文件上传在 v106.15 中有效在 107.1.1 中失败
RestSharp File upload works in v106.15 fails in 107.1.1
我正在通过他们的 API 将截图失败 png 上传到 Test Rail - 这是在 106 中工作的代码:
Request = new RestRequest("/index.php?/api/v2/add_attachment_to_result/85)
.AddHeader("Content-Type", "multipart/form-data")
.AddFile("attachment", "C:\Source\screenshot.png");
IRestResponse AddAttachmentResponse = Client.Post(Request);
升级到 v107 后我唯一改变的是最后一行:
RestResponse AddAttachmentResponse = Client.PostAsync(Request).GetAwaiter().GetResult();
我现在从 Test Rail API“Bad Request”收到错误消息 - 这是关于他们 API 的文档:Test Rail Add Attachment API doc - 我知道 http 引擎已更改107 - 我现在需要做哪些不同的事情?
更新:
看起来 v107 没有在 header 中发送 Content-Type - 这是 HttpTracer 的输出:
==================== HTTP 错误请求:[POST] ============== ======
授权:基本 TokenRemoved
接受:application/json、text/json、text/x-json、text/javascript、*+json、application/xml、text/xml、+xml, *
User-Agent: RestSharp/107.1.1.0
Accept-Encoding: gzip, deflate, br
饼干:tr_session=7cef485e-1aca-46bb-a773-9d9f5d410ee6
--8eef1c58-a3df-4ddb-a1c5-e081ccf90709
Content-Type: application/octet-stream
Content-Disposition: form-data;名称=附件;文件名=Untitled.png;文件名=utf-8''Untitled.png
为简洁起见被删减
请注意 body 中有 Content-Type,但 header 中有 none。
问题link:https://github.com/restsharp/RestSharp/issues/1713
正如我们讨论的那样,HttpTracer
只显示请求headers,而Content-Type
是请求header。
在调试这个问题(以及其他几个相关问题)时,我们发现问题是由于服务器无法处理表单中的 name
和 filename
参数引起的部分 (Content-Disposition
header) 如果它们没有用引号引起来。奇怪的是,直接使用 ContentDispositionHeaderValue
添加内容配置默认情况下不会添加引号。手动添加它们后开始工作:
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") {
Name = $"\"{file.Name}\"",
FileName = $"\"{file.FileName}\""
};
我的回答是给遇到类似问题的 107.1 的任何人,最新的 alpha 和下一个稳定版本应该会正确处理这个问题。
我正在通过他们的 API 将截图失败 png 上传到 Test Rail - 这是在 106 中工作的代码:
Request = new RestRequest("/index.php?/api/v2/add_attachment_to_result/85)
.AddHeader("Content-Type", "multipart/form-data")
.AddFile("attachment", "C:\Source\screenshot.png");
IRestResponse AddAttachmentResponse = Client.Post(Request);
升级到 v107 后我唯一改变的是最后一行:
RestResponse AddAttachmentResponse = Client.PostAsync(Request).GetAwaiter().GetResult();
我现在从 Test Rail API“Bad Request”收到错误消息 - 这是关于他们 API 的文档:Test Rail Add Attachment API doc - 我知道 http 引擎已更改107 - 我现在需要做哪些不同的事情?
更新: 看起来 v107 没有在 header 中发送 Content-Type - 这是 HttpTracer 的输出:
==================== HTTP 错误请求:[POST] ============== ====== 授权:基本 TokenRemoved 接受:application/json、text/json、text/x-json、text/javascript、*+json、application/xml、text/xml、+xml, * User-Agent: RestSharp/107.1.1.0 Accept-Encoding: gzip, deflate, br 饼干:tr_session=7cef485e-1aca-46bb-a773-9d9f5d410ee6 --8eef1c58-a3df-4ddb-a1c5-e081ccf90709 Content-Type: application/octet-stream Content-Disposition: form-data;名称=附件;文件名=Untitled.png;文件名=utf-8''Untitled.png
为简洁起见被删减
请注意 body 中有 Content-Type,但 header 中有 none。
问题link:https://github.com/restsharp/RestSharp/issues/1713
正如我们讨论的那样,HttpTracer
只显示请求headers,而Content-Type
是请求header。
在调试这个问题(以及其他几个相关问题)时,我们发现问题是由于服务器无法处理表单中的 name
和 filename
参数引起的部分 (Content-Disposition
header) 如果它们没有用引号引起来。奇怪的是,直接使用 ContentDispositionHeaderValue
添加内容配置默认情况下不会添加引号。手动添加它们后开始工作:
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") {
Name = $"\"{file.Name}\"",
FileName = $"\"{file.FileName}\""
};
我的回答是给遇到类似问题的 107.1 的任何人,最新的 alpha 和下一个稳定版本应该会正确处理这个问题。