一、内容协商
- 概述
- IContentNegotiator
- Negotiate()
- 根据Formatters、返回结果以及Request进行内容协商
- 返回协商机制筛选后的Formatter以及mediaType
- 内容协商的默认实现DefaultContentNegotiator
- 从HttpConfiguration中注册的所有Formatter中选择出能对返回结果进行序列化的Formatter
- 判断依据是调用 MediaTypeFormatter.CanWriteType
- 得到服务器能提供的呈现形式
- 根据请求头中的信息,筛选出客户端想要的呈现形式
- 针对请求头中直接携带MediaType信息的情况
- 根据MediaTypeFormatter中的SupportedMediaTypes集合进行匹配
- 针对请求头中包含自定义信息的情况
- 根据MediaTypeFormatter中的MediaTypeMappings集合中保存的请求头与MediaType的映射关系进行匹配
- 从所有符合条件的匹配结果中找出最合适的
- 如果有多个请求头,则选择权重因子最大的
- 如果没有请求头,则根据请求体的呈现形式进行推断
- 如果没有请求体,则选取服务器能提供的呈现形式中的第一种作为筛选结果
Accept: application/json, application/xml; q=0.9, */*; q=0.1