サーチ…


MediaTypeFormatter基本情報

MediaTypeFormatterそこから抽象クラスですJsonMediaTypeFormatterXmlMediaTypeFormatterクラスから継承します。ここで、 JsonMediaTypeFormatterクラスはJSONオブジェクトを処理し、 XmlMediaTypeFormatterクラスはXMLオブジェクトを処理します。

Accept Headerの値に関係なく、JSONのみを返します。

リクエストの応答でJSONオブジェクトのみを返すにはweather application/jsonまたはapplication/xmlWebApiConfigクラスのRegisterメソッドに次の行を書き込む場合、リクエストのヘッダー値を受け入れます。

config.Formatters.Remove(config.Formatters.XmlFormatter);

ここで、 configHttpConfigurationクラスのオブジェクトです。このコード行は、 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を返す:

  1. ブラウザから要求が発行されると、Web APIサービスはXMLではなくJSONを返す必要があります。
  2. 要求がフィドラーのようなツールから出されたとき、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をサーバから得るでしょう。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow