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