我遇到了同样的问题。我必须上传一个文件并使用特定的内容类型与REST接口通信。你可以将Http.RequestBody修改为byte[](以及所有依赖项),但我认为这样更容易:
我修改了RestSharp,使其仅在文件数量> 1或文件数量= 1且还设置了正文或其他提交数据时才使用多部分编码。
您必须修改Http.cs中的第288行,从
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)
{
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[]数据而非路径。希望这有所帮助。