我正在尝试执行 a 的自定义实现MediaTypeFormatter
,但bool CanReadType(Type type)
始终使用类型IKeyValueModel
而不是我的类型调用该方法MyProduct
。
在我的 API 控制器中,我有:
[HttpPost]
public Task Save(MyProduct product)
protected override bool CanReadType(Type type)
{
if (type == typeof(IKeyValueModel))
return false;
return true;
}
但后来我得到一个“MissingMethodException:没有为此对象定义无参数构造函数”,因为我的模型类型没有无参数构造函数。所以看起来因为CanReadType
返回 false IKeyValueModel
,框架使用了另一个媒体类型格式化程序。实际上,该方法OnReadFromStreamAsync
永远不会被击中。
我希望能够控制我的模型如何反序列化,我想获得真正的类型而不是IKeyValueModel
.
这已经在带有模型绑定器的 MVC 中运行良好。
干杯。
2012 年 5 月 29 日更新:
如果我删除默认的 json 格式化程序,它可以工作:
public static void RegisterApis(HttpConfiguration config)
{
config.Formatters.Clear();
但是我想保留两者,我怎么能指出我想使用哪一个?
问候。