我的网络API使用内容协商,我使用自定义格式化程序来渲染Json。但是,在少量动作中,我想使用asp.net附带的通用json格式化程序。
在configureServices中,我添加了格式化程序,然后添加了JsonOutputFormatter。
如何设置哪些操作或类型使用哪个序列化程序?或者有没有办法禁止通用格式化程序提供某些类型或操作?
在某些设置中,应该使用我的自定义格式化程序格式化的类型使用标准json格式化程序进行格式化。这从设置到设置的变化。
例如,当部署到azure并从浏览器中运行的代码调用时,使用accept标头"application/json, text/plain, */*"
,它使用标准的Json格式化程序,当在我的计算机中的kestrel中运行相同的代码时使用我的自定义json格式化程序
答案 0 :(得分:0)
在格式化程序构造函数中,您可以声明有效的媒体类型/编码。
public YourOutputFormatter()
{
SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("<media types>"));
SupportedEncodings.Add(Encoding.Unicode);
}
您可以覆盖格式化程序中的CanWriteType
或CanWriteResult
方法。由于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
}
如果满足以下条件,请使用
CanWriteResult
:
- 您的操作方法会返回一个模型类。
- 可能会在运行时返回派生类。
- 您需要在运行时知道操作返回了哪个派生类。