我想以protobuf格式向WebApi服务发送List(Of String)。 我尝试了下面的解决方案,但数据对象是Nothing。 如何设置ByteArray的属性名称,还是可以使用FormUrlEncodedContent?
我错了什么?
我在互联网上搜索但我找不到正确的解决方案。 我希望我的问题很明确。
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
答案 0 :(得分:1)
Web API基于媒体格式化来解析和格式化值。但是Web APi只包括以下格式化程序:XML,JSON,BSON和form-urlencoded。
如果您希望以与Content-Type
和Accept
标题相同的格式发送和接收数据,则需要实现自己的格式化程序。
这里有两个实现媒体格式的示例,但是如果你谷歌搜索“Web APi自定义媒体格式化程序”,你可以获得更多:
基本上,你需要:
MediaTypeFormatter
或BufferedMediaTypeFormatter
派生一个类(用于异步或同步实现)
CanWriteType
,CanreadType
,WriteToStream
和ReadFromStream
考虑到将使用格式化程序:
Content-Type
标题Accept
标题