我遇到了同样的问题。我必须只上传一个文件并使用特定的内容类型与 REST 接口进行通信。您可以将 Http.RequestBody 修改为 byte[] (以及所有依赖项),但我认为这样更容易:
我修改了 RestSharp,使其仅在文件数 > 1 或文件数 = 1 并且还有正文或其他发布数据集时才使用多部分编码。
您必须从第 288 行修改 Http.cs
if(HasFiles)
至
if(Files.Count > 1 || (Files.Count == 1 && (HasBody || Parameters.Any())))
对于 Http.Sync.cs 修改 PreparePostData 从
private void PreparePostData(HttpWebRequest webRequest)
{
if (HasFiles)
{
webRequest.ContentType = GetMultipartFormContentType();
using (var requestStream = webRequest.GetRequestStream())
{
WriteMultipartFormData(requestStream);
}
}
PreparePostBody(webRequest);
}
至
private void PreparePostData(HttpWebRequest webRequest)
{
// Multiple Files or 1 file and body and / or parameters
if (Files.Count > 1 || (Files.Count == 1 && (HasBody || Parameters.Any())))
{
webRequest.ContentType = GetMultipartFormContentType();
using (var requestStream = webRequest.GetRequestStream())
{
WriteMultipartFormData(requestStream);
}
}
else if (Files.Count == 1)
{
using (var requestStream = webRequest.GetRequestStream())
{
Files.Single().Writer(requestStream);
}
}
PreparePostBody(webRequest);
}
如果你使用异步版本,你必须在Http.Async.cs中修改类似上面的代码。
现在你可以像这样使用 RestSharp
IRestRequest request = new RestRequest("urlpath", Method.PUT);
request.AddHeader("Content-Type", "application/zip");
request.AddFile("Testfile", "C:\\File.zip");
Client.Execute(request);
AddFile 还提供了用于设置直接 byte[] 数据而不是路径的重载。希望有帮助。