zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    C#调用JS
    C#对象序列化(2)
    C#委托和事件(2)
    C#委托和事件(1)
    Windows Mobile Ping 命令实现
    操作 SQL Server Mobile 2005 数据库的常用 C# 代码
    Pocket PC 2003数据库操作
    C#委托和事件(3)
    C#中RSA加密解密和签名与验证的实现
    使用SqlBulkCopy数据导入和复制
  • 原文地址:https://www.cnblogs.com/dehai/p/5043240.html
Copyright © 2011-2022 走看看