WebApi2官网学习记录---BSON
BSON 是轻量级的,能够进行快速查询和高效的解码/编码。BSON方便查询是由于elements的前面都有一个表示长度的字段,所以解释器可以快速跳过这个elements;高效的解码/编码是因为numeric数据直接存储为numbers,不用转为string。
在服务端启用BSON
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Formatters.Add(new BsonMediaTypeFormatter()); // Other Web API configuration not shown...
}
}
如果client的请求是“application/bson”,webapi将使用BSON的序列化器。
可以将其它的media type也使用BSON就行序列化,如下:
var bson = new BsonMediaTypeFormatter();
bson.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/vnd.contoso"));
config.Formatters.Add(bson);
使用HttpClient模拟BSON请求
static async Task RunAsync()
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost"); // Set the Accept header for BSON.
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson")); // Send GET request.
result = await client.GetAsync("api/books/1");
result.EnsureSuccessStatusCode(); // Use BSON formatter to deserialize the result.
MediaTypeFormatter[] formatters = new MediaTypeFormatter[] {
new BsonMediaTypeFormatter()
}; var book = await result.Content.ReadAsAsync<Book>(formatters);
}
}
序列化原生的类型
BSON的文档都是key/value的集合,BSON的规范并没有定义只返回一个原生值的语法,如返回一个int或string类型的值。
为了解决这个问题BsonMediaTypeFormatter将原生的类型特殊对待,在序列化前,将其转为key/value形式,key是"Value".如下:
public class ValuesController : ApiController
{
public IHttpActionResult Get()
{
return Ok();
}
}
返回值:
{ "Value": }
当反序列化时,序列化器将数据转为原始的值。当然如果使用其它的BSON序列化器,如果服务端返回这样类型的数据,BSON解析器需要处理这种情况。
WebApi2官网学习记录---BSON的更多相关文章
- WebApi2官网学习记录---Media Formatters
Web API内建支持XML.JSON.BSON.和form-urlencoded的MiME type. 创建的自定义MIME类型要继承一下类中的一个: MediaTypeFormatter 这个类使 ...
- WebApi2官网学习记录---Cookie
Cookie的几个参数: Domain.Path.Expires.Max-Age 如果Expires与Max-Age都存在,Max-Age优先级高,如果都没有设置cookie会在会话结束后删除cook ...
- WebApi2官网学习记录---批量处理HTTP Message
原文:Batching Handler for ASP.NET Web API 自定义实现HttpMessageHandler public class BatchHandler : HttpMess ...
- WebApi2官网学习记录---Html Form Data
HTML Forms概述 <form action="api/values" method="post"> 默认的method是GET,如果使用GE ...
- WebApi2官网学习记录--HttpClient Message Handlers
在客户端,HttpClient使用message handle处理request.默认的handler是HttpClientHandler,用来发送请求和获取response从服务端.可以在clien ...
- WebApi2官网学习记录--HTTP Message Handlers
Message Handlers是一个接收HTTP Request返回HTTP Response的类,继承自HttpMessageHandler 通常,一些列的message handler被链接到一 ...
- WebApi2官网学习记录---Configuring
Configuration Settings WebAPI中的configuration settings定义在HttpConfiguration中.有一下成员: DependencyResolver ...
- WebApi2官网学习记录--- Authentication与Authorization
Authentication(认证) WebAPI中的认证既可以使用HttpModel也可以使用HTTP message handler,具体使用哪个可以参考一下依据: 一个HttpModel可以 ...
- WebApi2官网学习记录---单元测试
如果没有对应的web api模板,首先使用nuget进行安装 例子1: ProductController 是以硬编码的方式使用StoreAppContext类的实例,可以使用依赖注入模式,在外部指定 ...
随机推荐
- HTML5 格式化、样式、链接、表格
HTML格式化.样式.链接.表格的使用举例
- Multipatch对象
Multipatch对象是 TriangleStrip 和TriangleFan, Trangle,Ring对象的集合 TriangleStrip TriangleFan Trangle
- innodb部分参数优化
参数调优内容:1. 内存利用方面2. 日值控制方面3. 文件IO分配,空间占用方面4. 其它相关参数 1.内存利用方面:首先介绍一个Innodb最重要的参数:innodb_buffer_pool_si ...
- Request 分别获取具有相同 name 属性表单元素值
html 中是允许多个具有相同name属性的元素的,例如 <div> <input name="txtName" id="txtFirstName&qu ...
- FileInputStream
InputStream 基类,抽象类 FileInputStream 读取文件的字节流 BufferedInputStream 缓冲输入字符流 package file; import java.io ...
- SQL建模错误--逗号分隔值
最近帮一个客户分析SQL语句的问题,大致经过如下 场景: 委托方有一个用于追踪他们产品的系统,每个产品都会卖给许多客户:但是客户又被从业务上分成两类,一类是带有合作伙伴性质的,这个 合作伙伴通常会给予 ...
- Lintcode--006(交叉字符串)
Given three strings: s1, s2, s3, determine whether s3 is formed by the interleaving of s1 and s2. Ex ...
- 使用POI把Word Excel转为HTML
此方法是针对Office2003的,但是word中如果有图片,图片能够解析出来但是HTML文件中不显示.也不支持excel中的图片解析. 所需jar包如下如下: 1:PoiUtil.java pack ...
- android-support-v7-appcompat的配置使用
直接将android-support-v7-appcompat.jar包拷贝到项目的libs/下面是不能使用的,具体做法官方文档给出了详细说明: (开发环境是ADT) Using Eclipse Cr ...
- GET方式的中文编码与解码