0
A
回答
1
当然,你可以创建一个自定义MediaTypeMapping并添加到格式化。下面
例子:
config.Formatters.JsonFormatter.MediaTypeMappings.Add(new UserAgentMediaTypeMapping("Chrome", "application/json"));
-----------------------------------------------------
public class UserAgentMediaTypeMapping : MediaTypeMapping
{
private string _userAgent;
public UserAgentMediaTypeMapping(string userAgent, string mediaType)
: base(mediaType)
{
//todo: error check
_userAgent = userAgent.ToLowerInvariant();
}
public UserAgentMediaTypeMapping(string userAgent, MediaTypeHeaderValue mediaType)
: base(mediaType)
{
//todo: error check
_userAgent = userAgent.ToLowerInvariant();
}
public string UserAgent
{
get
{
return _userAgent;
}
}
public override double TryMatchMediaType(HttpRequestMessage request)
{
HttpHeaderValueCollection<ProductInfoHeaderValue> agents = request.Headers.UserAgent;
foreach (ProductInfoHeaderValue pihv in agents)
{
if (pihv.Product != null)
{
if (pihv.Product.Name.ToLowerInvariant() == UserAgent)
{
return 1.0;
}
}
}
return 0.0;
}
}
当多个格式化匹配传入的请求的标准会发生什么? Conneg算法选择哪一个?
在Conneg算法运行过程中,基于Request Accept头,Content-Type头,MediaTypeMapping等一系列条件,总有可能有多个格式化程序可能会在写入Response时指示其可用性。如你所想,Conneg算法最终只能选择一个格式化器。 默认Conneg算法具有以下优先顺序来选择最终的格式:根据媒体类型映射
- 格式化的比赛。
- 基于请求接受标头的媒体类型的格式符匹配。
- 基于请求内容类型头的媒体类型的格式符匹配。
- 格式化程序匹配是基于它是否可以序列化响应数据的类型。
相关问题
- 1. 使用BeautifulSoup扩展选择
- 2. 扩展选择二默认
- 3. FinderSync核对扩展选择
- 4. 扩展OkHttp协议选择
- 5. 扩展zend db选择
- 6. 选择2扩展,更新所选值
- 7. 动态扩展选择选项背景
- 8. WPF绑定listview选择项目扩展器扩展
- 9. 替换或扩展UIBarButtonItem选择器
- 10. 扩展jQuery属性选择器
- 11. 使用Javascript扩展文本选择
- 12. 在灰烬扩展一个选择1.8
- 13. QTreeWidget扩展选择改变的信号
- 14. JS - Chrome扩展 - 交通选择
- 15. 如何选择非扩展列?
- 16. 未选择Jtree节点扩展
- 17. WPF TreeView - 选择和扩展节点
- 18. 扩展时更改选择边框
- 19. 从协议扩展调用选择
- 20. 扩展一个选择....使用EF
- 21. 自定义UITabBar扩展选择
- 22. wpf datagrid选择+扩展器的问题
- 23. FileReader;选择文件扩展名
- 24. 使用引导选择与Html扩展
- 25. FancyTree - 无法加载选择扩展
- 26. 如何在vimscript中扩展选择
- 27. 如何自定义扩展选择?
- 28. 为什么选择扩展产品?
- 29. 扩展XML模式xs:选择
- 30. 使用伪选择器扩展Sass