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. FinderSync覈對擴展選擇
- 2. 使用BeautifulSoup擴展選擇
- 3. 動態擴展選擇選項背景
- 4. 替換或擴展UIBarButtonItem選擇器
- 5. 從協議擴展調用選擇
- 6. 在灰燼擴展一個選擇1.8
- 7. wpf datagrid選擇+擴展器的問題
- 8. WPF列表框中的擴展選擇
- 9. 擴展jQuery屬性選擇器
- 10. 如何選擇非擴展列?
- 11. 未選擇Jtree節點擴展
- 12. FancyTree - 無法加載選擇擴展
- 13. JS - Chrome擴展 - 交通選擇
- 14. 爲什麼選擇擴展產品?
- 15. 選擇 - 可能性增加PHP擴展
- 16. FileReader;選擇文件擴展名
- 17. 自定義UITabBar擴展選擇
- 18. 擴展/增長JQuery元素選擇?
- 19. 刪除SASS中的擴展選擇器
- 20. 按文件擴展名選擇串
- 21. 擴展XML模式xs:選擇
- 22. 使用Javascript擴展文本選擇
- 23. 擴展引導選擇插件
- 24. VS代碼擴展選擇不工作
- 25. 取消選擇在WPF列表框與擴展選擇模式
- 26. 給予用戶選項以選擇擴展權限
- 27. 如何在選擇列表中顯示擴展選項?
- 28. Symfony2:爲擴展選擇域設置「設置」值(複選框)
- 29. 自動擴展樹並選擇與Watir複選框
- 30. 選擇用戶選項作爲擴展用例?