MediaTypeFormatter 基本資訊
MediaTypeFormatter
是一個抽象類,JsonMediaTypeFormatter
和 XmlMediaTypeFormatter
類繼承自該類。這裡,JsonMediaTypeFormatter
類處理 JSON 物件,XmlMediaTypeFormatter
類處理 XML 物件。
無論 Accept Header 值如何,僅返回 JSON:
如果 application/json
或 application/xml
在 WebApiConfig
類的 Register
方法中寫下以下行,則在請求的響應中僅返回 JSON 物件的天氣 Accept Header 值。
config.Formatters.Remove(config.Formatters.XmlFormatter);
在這裡,config
是 HttpConfiguration
類的一個物件。這行程式碼完全刪除了 XmlFormatter
,它強制 ASP.NET Web API 始終返回 JSON,而不管客戶端請求中的 Accept 標頭值如何。如果希望服務僅支援 JSON 而不支援 XML,請使用此技術。
無論 Accept Header 值如何,僅返回 XML:
如果 application/json
或 application/xml
在 WebApiConfig
類的 Register
方法中寫下以下行,則在請求的響應中僅返回 XML 物件的天氣接受 Header 值請求。
config.Formatters.Remove(config.Formatters.JsonFormatter);
這裡,config
是如上所述的 HttpConfiguration
類的物件。這行程式碼完全刪除了 JsonFormatter
,它強制 ASP.NET Web API 始終返回 XML,而不管客戶端請求中的 Accept 標頭值如何。如果希望服務僅支援 XML 而不支援 JSON,請使用此技術。
返回 JSON 而不是 XML:
- 從瀏覽器發出請求時,Web API 服務應返回 JSON 而不是 XML。
- 當從 fiddler 這樣的工具發出請求時,應該遵守 Accept 標頭值。這意味著如果 Accept 標頭設定為 application / xml,則服務應返回 XML,如果將其設定為 application / json,則服務應返回 JSON。
方法 1:
在 WebApiConfig
類的 Register
方法中包含以下行。
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
這指示 ASP.NET Web API 在為 text/html
發出請求時使用 JsonFormatter
,這是大多數瀏覽器的預設設定。這種方法的問題是響應的 Content-Type
頭設定為 text/html
,這是誤導性的。
方法 2:
使用自定義格式化程式建立一個派生自 JsonMediaTypeFormatter
類的類並實現 SetDefaultContentHeaders
方法。
以下是自定義 JSON 格式化程式類的示例,它返回 JSON 格式作為響應。
public class CustomJsonFormatter : JsonMediaTypeFormatter
{
public CustomJsonFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
這是 Custom Media 型別格式化程式的示例,它返回 CSV 格式作為響應。
public class CSVMediaTypeFormatter : MediaTypeFormatter {
public CSVMediaTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
}
public CSVMediaTypeFormatter(MediaTypeMapping mediaTypeMapping) : this()
{
MediaTypeMappings.Add(mediaTypeMapping);
}
public CSVMediaTypeFormatter(IEnumerable<MediaTypeMapping> mediaTypeMappings) : this()
{
foreach (var mediaTypeMapping in mediaTypeMappings)
{
MediaTypeMappings.Add(mediaTypeMapping);
}
}
}
之後,實現自定義格式化程式類在 WebApiConfig
類的 Register
方法中註冊它。
config.Formatters.Add(new CustomJsonFormatter());
現在,根據你的格式化程式,你將從伺服器獲得響應和 Content-Type
。