2017-03-17 11 views
0

私のWeb APIはコンテンツネゴシエーションを使用しており、Jsonのレンダリングに使用するカスタムフォーマッタがあります。しかし、少数のアクションでは、asp.netに付属のジェネリックjsonフォーマッタを使用したいと思います。タイプまたはアクションに基づいて使用するフォーマッタ

configureServicesでは、フォーマッタを追加してからJsonOutputFormatterを追加します。

シリアライザを使用するアクションまたはタイプを設定するにはどうすればよいですか?あるいは、ジェネリックフォーマッタがいくつかのタイプまたはアクションを提供することを禁止する方法がありますか?

私のカスタムフォーマッタでフォーマットされるはずのタイプは、いくつかの設定で、標準jsonフォーマッタを使用してフォーマットされます。そして、これは設定から​​設定に変わります。 たとえば、azureにデプロイされ、ブラウザで実行されているコードから呼び出された場合、acceptヘッダー"application/json, text/plain, */*"を使用して標準Jsonフォーマッタが使用されます。

答えて

0
  1. 有効なメディアタイプ/エンコードを宣言することができます。

    public YourOutputFormatter() 
    { 
        SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("<media types>")); 
    
        SupportedEncodings.Add(Encoding.Unicode); 
    } 
    
  2. あなたのフォーマッタでCanWriteTypeCanWriteResultメソッドをオーバーライドすることができます。 CanWriteType方法のみをチェックとして、あなたはタイプからシリアル化できるかどう

    protected virtual bool CanWriteType(Type type); 
    

    CanWriteResultは、より多くのあなたのために適切な場合でなければなりません:以下の場合

    使用CanWriteResult

    public override bool CanWriteResult(OutputFormatterCanWriteContext context) 
    { 
        // return true/false based on context.ContentType 
        // there is also context.ObjectType 
    } 
    

    documentationから条件は真です:

    • アクションメソッドはモデルクラスを返します。
    • 実行時に返される派生クラスがあります。
    • アクションで派生クラスが返されたことを実行時に知る必要があります。
+0

私はすでに私のフォーマッタでこれを持っています。この問題は、カスタムjsonフォーマッタの代わりに使用されているジェネリックjsonフォーマッタを制限しています。 – cellik

+0

@cellikであり、ジェネリックjsonフォーマッタではなく、JsonOutputFormatterから継承した独自のフォーマッタを使用して、その振る舞いをオーバーライドすることができます – Set

関連する問題