私は同じ問題に遭遇しました。正確に1つのファイルをアップロードし、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[]データを設定するためのオーバーロードも提供します。お役に立てば幸いです。