根据类型或操作使用哪种格式化程序

时间:2017-03-17 10:03:01

标签: asp.net-web-api asp.net-core

我的网络API使用内容协商,我使用自定义格式化程序来渲染Json。但是,在少量动作中,我想使用asp.net附带的通用json格式化程序。

在configureServices中,我添加了格式化程序,然后添加了JsonOutputFormatter。

如何设置哪些操作或类型使用哪个序列化程序?或者有没有办法禁止通用格式化程序提供某些类型或操作?

在某些设置中,应该使用我的自定义格式化程序格式化的类型使用标准json格式化程序进行格式化。这从设置到设置的变化。 例如,当部署到azure并从浏览器中运行的代码调用时,使用accept标头"application/json, text/plain, */*",它使用标准的Json格式化程序,当在我的计算机中的kestrel中运行相同的代码时使用我的自定义json格式化程序

1 个答案:

答案 0 :(得分:0)

  1. 在格式化程序构造函数中,您可以声明有效的媒体类型/编码。

    public YourOutputFormatter()
    {
        SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("<media types>"));
    
        SupportedEncodings.Add(Encoding.Unicode);
    }
    
  2. 您可以覆盖格式化程序中的CanWriteTypeCanWriteResult方法。由于CanWriteType方法仅检查是否可以从类型

    序列化
    protected virtual bool CanWriteType(Type type);
    

    CanWriteResult应该更适合你的情况:

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

    来自documentation

      

    如果满足以下条件,请使用CanWriteResult

         
        
    • 您的操作方法会返回一个模型类。
    •   
    • 可能会在运行时返回派生类。
    •   
    • 您需要在运行时知道操作返回了哪个派生类。
    •