我需要做什么才能使用 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>

如何知道我是否能够发送序列化数据?

我需要做什么才能使用 C# ASP .NET Web API 发送 Protobuf 序列化数据

您需要做几件事:

  1. 您需要一个 Web 客户端,该客户端实际上在请求的 Accept 标头中请求 protobuf 序列化内容。Chrome 不这样做 - 它只要求文本/html、图像/* 等内容......您希望网络浏览器要求的东西。protobuf没有标准的内容类型,所以你可以定义自己的内容类型 - 许多人使用application/x-protobuf。有一些Chrome开发者工具,如高级REST客户端,可让您从浏览器练习REST API,并根据需要设置请求标头。

  2. 在 Web API 端,需要创建并注册自己的媒体格式化程序。这里有一个很好的演练。您可能会从 BufferedMediaTypeFormatter 派生来执行 protobuf (de/) 序列化,并且您需要配置此类来处理application/x-protobuf请求。然后,需要将其注册到 Web API 管道。