首页 > Windows开发 > 详细

webapi 中使用 protobuf

时间:2015-12-26 22:06:53      阅读:1862      评论:0      收藏:0      [点我收藏+]

相比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);

 

webapi 中使用 protobuf

原文:http://www.cnblogs.com/dehai/p/5043240.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!