asp.net-web-api
ASP.NET Web API MediaTypeFormatter
サーチ…
MediaTypeFormatter基本情報
MediaTypeFormatterそこから抽象クラスですJsonMediaTypeFormatterとXmlMediaTypeFormatterクラスから継承します。ここで、 JsonMediaTypeFormatterクラスはJSONオブジェクトを処理し、 XmlMediaTypeFormatterクラスはXMLオブジェクトを処理します。
Accept Headerの値に関係なく、JSONのみを返します。
リクエストの応答でJSONオブジェクトのみを返すにはweather application/jsonまたはapplication/xmlがWebApiConfigクラスのRegisterメソッドに次の行を書き込む場合、リクエストのヘッダー値を受け入れます。
config.Formatters.Remove(config.Formatters.XmlFormatter);
ここで、 configはHttpConfigurationクラスのオブジェクトです。このコード行は、 XmlFormatterを完全に削除しXmlFormatterこれは、ASP.NET Web APIがクライアント要求のAcceptヘッダー値に関係なく常にJSONを返すようにします。サービスがXMLではなくJSONのみをサポートするようにするには、この手法を使用します。
Accept Header値に関係なくXMLのみを返します。
WebApiConfigクラスのRegisterメソッドにapplication/jsonまたはapplication/xmlが次の行を書き込む場合、要求のヘッダー値を受け入れます。
config.Formatters.Remove(config.Formatters.JsonFormatter);
ここで、 configは、前述のHttpConfigurationクラスのオブジェクトです。このコード行は、 JsonFormatterを完全に削除しますJsonFormatterは、クライアント要求のAcceptヘッダー値にかかわらず常にXMLを返すようにASP.NET Web APIを強制します。サービスがJSONではなくXMLのみをサポートするようにするには、この手法を使用します。
XMLの代わりにJSONを返す:
- ブラウザから要求が発行されると、Web APIサービスはXMLではなくJSONを返す必要があります。
- 要求がフィドラーのようなツールから出されたとき、Acceptヘッダー値は尊重されるべきです。つまり、Acceptヘッダーがapplication / xmlに設定されている場合、サービスはXMLを返す必要があり、application / jsonに設定されている場合、サービスはJSONを返す必要があります。
方法1:
WebApiConfigクラスのRegisterメソッドに次の行を含めます。
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
これは、ほとんどのブラウザのデフォルトであるtext/htmlが要求されたときにJsonFormatterを使用するようにASP.NET Web APIに指示します。このアプローチの問題は、レスポンスのContent-Typeヘッダーが誤解を招くtext/html設定されていることです。
方法2:
カスタムフォーマッタを使用します。 JsonMediaTypeFormatterクラスから派生したクラスを作成し、 SetDefaultContentHeadersメソッドを実装し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");
}
}
これは、カスタムメディアタイプフォーマッタの例で、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メソッドにRegisterされます。
config.Formatters.Add(new CustomJsonFormatter());
さて、あなたのフォーマッターによれば、あなたは応答とContent-Typeをサーバから得るでしょう。