我需要做什么才能使用 C# ASP .NET Web API 发送 Protobuf 序列化数据
本文关键字:Web NET ASP API 发送 数据 序列化 Protobuf 什么 | 更新日期: 2023-09-27 18:34:11
我是protobuf的新手,也是asp .net的新手,所以我可能需要这方面的帮助。我有我的PersonsController的以下代码片段:
public class PersonController : ApiController
{
[ProtoContract]
public class Person
{
[ProtoMember(1)]
public int ID { get; set; }
[ProtoMember(2)]
public string First { get; set; }
[ProtoMember(3)]
public string Last { get; set; }
}
// GET api/values
public IEnumerable<Person> Get()
{
List<Person> myList = new List<Person> {
new Person { ID = 0, First = "Judy", Last = "Lee" },
new Person { ID = 1, First = "John", Last = "Doe" },
new Person { ID = 2, First = "George", Last = "Poole" },
};
return myList;
}
}
我想知道这是否足以发送 protobuf 数据并被其他应用程序使用?
我正在尝试直接在谷歌浏览器中访问它,我得到的只是数据的XML格式。
<ArrayOfPersonController.Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/SampleSerialize.Controllers">
<PersonController.Person>
<First>Judy</First>
<ID>0</ID>
<Last>Lee</Last>
</PersonController.Person>
<PersonController.Person>
<First>John</First>
<ID>1</ID>
<Last>Doe</Last>
</PersonController.Person>
<PersonController.Person>
<First>George</First>
<ID>2</ID>
<Last>Poole</Last>
</PersonController.Person>
</ArrayOfPersonController.Person>
如何知道我是否能够发送序列化数据?
您需要做几件事:
-
您需要一个 Web 客户端,该客户端实际上在请求的
Accept
标头中请求 protobuf 序列化内容。Chrome 不这样做 - 它只要求文本/html、图像/* 等内容......您希望网络浏览器要求的东西。protobuf没有标准的内容类型,所以你可以定义自己的内容类型 - 许多人使用application/x-protobuf
。有一些Chrome开发者工具,如高级REST客户端,可让您从浏览器练习REST API,并根据需要设置请求标头。 -
在 Web API 端,需要创建并注册自己的媒体格式化程序。这里有一个很好的演练。您可能会从 BufferedMediaTypeFormatter 派生来执行 protobuf (de/) 序列化,并且您需要配置此类来处理
application/x-protobuf
请求。然后,需要将其注册到 Web API 管道。