相比json来说,好处是速度更快,带宽占用更小。其效果大致等于json+Gzip。
在webapi中使用protobuf的方法为:
引用nuget包
Install-Package protobuf-net
为DTO添加注解
[ProtoContract]
public class Product
{ [ProtoMember()]
public int Id { get; set; } [ProtoMember()]
public string Name { get; set; } [ProtoMember()]
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:
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);