使用 ProtoBuf 将字符串列表发送到 Web Api
Send List of String to WebApi with ProtoBuff
我想将 protobuf 格式的列表(字符串)发送到 WebApi 服务。
我尝试了下面的解决方案,但数据对象什么都没有。
我如何设置 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
Web API 基于媒体格式化程序来解析和格式化值。但是 Web APi 只包含以下格式化程序:XML、JSON、BSON 和 form-urlencoded.
如果您想以不同的格式发送和接收数据,您可以使用 Content-Type
和 Accept
headers,您需要实现自己的格式化程序。
这里有两个实现媒体格式器的例子,但是如果你 google for "Web APi custom media formatters":
你可以获得更多
- Media Formatters in ASP.NET Web API 2. Sample of csv formatter.
- Implementing Custom Media Formatters in ASP.NET WebAPI
基本上,您需要:
- 从
MediaTypeFormatter
或 BufferedMediaTypeFormatter
派生出 class(用于异步或同步实现)
- 在构造函数中包含支持的 MIME 类型
- 实施
CanWriteType
、CanreadType
、WriteToStream
和 ReadFromStream
- 在 Web API 配置中注册媒体格式化程序 class
考虑到将使用格式化程序:
- 解析接收到的数据,当指定媒体格式时
Content-Type
header
- 当媒体格式指定为
Accept
时序列化返回的object header
我想将 protobuf 格式的列表(字符串)发送到 WebApi 服务。 我尝试了下面的解决方案,但数据对象什么都没有。 我如何设置 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
Web API 基于媒体格式化程序来解析和格式化值。但是 Web APi 只包含以下格式化程序:XML、JSON、BSON 和 form-urlencoded.
如果您想以不同的格式发送和接收数据,您可以使用 Content-Type
和 Accept
headers,您需要实现自己的格式化程序。
这里有两个实现媒体格式器的例子,但是如果你 google for "Web APi custom media formatters":
你可以获得更多- Media Formatters in ASP.NET Web API 2. Sample of csv formatter.
- Implementing Custom Media Formatters in ASP.NET WebAPI
基本上,您需要:
- 从
MediaTypeFormatter
或BufferedMediaTypeFormatter
派生出 class(用于异步或同步实现)- 在构造函数中包含支持的 MIME 类型
- 实施
CanWriteType
、CanreadType
、WriteToStream
和ReadFromStream
- 在 Web API 配置中注册媒体格式化程序 class
考虑到将使用格式化程序:
- 解析接收到的数据,当指定媒体格式时
Content-Type
header - 当媒体格式指定为
Accept
时序列化返回的object header