2015-01-14 2 views
0

Я хочу отправить список (Of String) в формате protobuf в службы WebApi. Я попробовал решение ниже, но объект данных - Nothing. Как я могу установить имя свойства ByteArray или я могу использовать FormUrlEncodedContent?Отправить список String для WebApi с ProtoBuff

Что я не так?

Я искал в Интернете, но я не могу получить правильное решение. Надеюсь, что мой вопрос ясен.

Dim articleList As List(Of String) 
articleList.Add("134545454") 
Using client As New HttpClient() 
    client.BaseAddress = New Uri(WEB_URL) 
    client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/x-protobuf")) 
    Dim stream As MemoryStream = New MemoryStream 
    ProtoBuf.Serializer.Serialize(Of List(Of String))(stream, articleList) 
    stream.Seek(0, SeekOrigin.Begin) 
    Dim data As New ByteArrayContent(stream.ToArray) 
    data.Headers.Add("ContentType", "application/x-protobuf") 
    Dim response = client.PostAsync("MutatieLijst", data).Result 

WebAPI Вызов:

<HttpPost()> 
Public Function GetArtikelMutatieLijst(ByVal data As List(Of String)) As List(Of ArtikelUpdate) 
End Function 

ответ

1

Web API основан на СМИ Форматтеры для разбора и значения формата. Но Web APi включает только следующие форматы: XML, JSON, BSON и form-urlencoded.

Если вы хотите отправлять и получать данные в другом формате, который вы используете с заголовками Content-Type и Accept, вам необходимо реализовать собственный форматтер.

Здесь у вас есть два примера для реализации медиа formmaters, но вы можете получить больше, если вы Google для "Веб APi пользовательских медиа форматтеров":

В основном, вам необходимо:

  • для получения класса отили BufferedMediaTypeFormatter (для асинхронного или synchronousimplemetations)
    • включить в конструкторе поддерживаемых типов MIME
    • осуществить CanWriteType, CanreadType, WriteToStream и ReadFromStream
  • зарегистрировать класс медиа форматтер в конфигурации Web-API

Учтите, что форматтер будет использоваться:

  • для анализа полученных данных, когда формат носителя указан в заголовке Content-Type
  • сериализовать возвращенный объект, когда формат носителя задается с Accept заголовком
+0

Спасибо. С вашей информацией я изменил: data.Headers.Add («ContentType», «application/x-protobuf») на data.Headers.Add («Content-Type», «application/x-protobuf»), и теперь он работает , –

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