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