2013-02-25 1 views
2

Как отправить массив байтов с использованием метода HTTP PUT? Способ AddFile класса RestRequest отправляет дополнительные заголовки. Способ AddParameter принимает тип Object.C# RestSharp PUT метод и отправлять необработанные байты (protobuf)

Как это сделать:

byte[] data; 
using (var ms = new MemoryStream()) 
{ 
    Serializer.Serialize(ms, query); 
    data = ms.ToArray(); 
    ms.Close(); 
} 
var client = new RestClient(ServerPath); 
var request = new RestRequest(RequestPath, Method.PUT); 
request.AddFile("stream", x => new MemoryStream(data), string.Empty); 
client.ExecuteAsync(request, responce => Debug.WriteLine(responce.Content)); 

Но на стороне сервера я вижу дополнительные заголовки

-------------------- ----------- 28947758029299 Content-Disposition: form-data; Name = "поток"; filename = "" Content-Type: application/octet-stream [RAW DATA HERE] ------------------------------ --28947758029299--

Дополнительные заголовки делают запрос нечитаемым. Что я делаю неправильно?

+0

Что сервер * ожидая * это выглядеть? должен ли полезный груз быть сырым телом? использование 'AddFile' * предполагает *, на самом деле он ожидает многочастность, но это не соответствует указанному типу/типу контента. Например, это так же просто, как «WebClient» с 'client.UploadData (адрес,« PUT », данные);'? –

+0

Сервер ожидает только необработанные данные, без заголовков. Если я использую сервер request.AddObject (data), см. Его как Length = 29 & Rank = 1 & SyncRoot = System.Byte% 5B% 5D & IsReadOnly = False & IsFixedSize = True & IsSynchronized = False – NikedLab

+0

, если у вас нет заголовков, тогда это не похоже на HTTP. .. HTTP * имеет заголовки *. Наличие заголовков не должно чрезмерно влиять на него. –

ответ

3

Благодаря Марку Гравелю. Решение:

 var client = new HttpClient(); 
     var httpContent = new ByteArrayContent(data); 
     client.PutAsync(Path, httpContent); 

 Смежные вопросы

  • Нет связанных вопросов^_^