webapi 中使用 protobuf


相比json来说,好处是速度更快,带宽占用更小。其效果大致等于json+Gzip。

在webapi中使用protobuf的方法为:

 

引用nuget包

Install-Package protobuf-net

 

为DTO添加注解 

    [ProtoContract]
    public class Product
    {

        [ProtoMember(1)]
        public int Id { get; set; }


        [ProtoMember(2)]
        public string Name { get; set; }


        [ProtoMember(3)]
        public long Value { get; set; }

    }

 

 

 注册MediaTypeFormatter

在WebApiConfig文件中添加黄色部分的代码

    public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 路由  config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // config.Formatters.Clear(); config.Formatters.Add(new ProtoBufFormatter()); } }

 

调用接口

http请求报文

GET http://test.cn/webapi/api/product/123 HTTP/1.1
Host: localhost:44605
Connection: keep-alive
Accept: application/x-protobuf 

注意黄色的部分

 httpclient请求

            string url = "http://test.cn/webapi/api/product/123";

            HttpClient client = new HttpClient();

            HttpRequestMessage request = new HttpRequestMessage();
       
            request.RequestUri = new Uri(url);
            request.Method = HttpMethod.Get;
            request.Headers.Add("Accept", "application/x-protobuf");

            HttpResponseMessage result = client.SendAsync(request).Result;

            var stream = result.Content.ReadAsStreamAsync().Result;

            var product= Serializer.Deserialize<Product>(stream);

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM