我想在ASP.Net Web API中创建自定义模型绑定器。有关如何从头开始执行此操作的大量资源,但我想利用现有功能。
我在codeplex中查看了源代码,并且可以在那里看到大量的模型绑定器,但大多数是密封的......即使这样,我也无法确定在哪种情况下使用哪一个。
这是我的api方法标题:
public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field)
我想要做的是基本上在填充所有基本属性后拦截模型绑定器,然后根据我将在客户端设置的http请求标头设置一些额外的值。
正如我所说,我很乐意创建自定义模型绑定器和模型绑定器并将它们连接起来,我遇到问题的是试图重新使用现有的功能。
谢谢,皮特
答案 0 :(得分:12)
点击此处查看WebApi的扩展点。
在WebApi中,MVC的DefaultModelBinder
没有确切的等价物。
如果您使用[FromBody]
属性,则会调用FormatterParameterBinding
,并使用MediaTypeFormatter
构建您的模型。
URI路径和Url(查询参数)的模型绑定将调用ModelBinderParameterBinding
,它将传递给IValueProvider
或IModelBinder
......
因此...
在您的示例中Field
(取决于内容类型协商的结果)将使用其中之一:XmlMediaTypeFormatter
,JsonMediaTypeFormatter
或FormUrlEncodedMediaTypeFormatter
。因此,您可以使用各自的设置自定义这些的序列化行为,例如JSON.NET设置......或实现您自己的或包装的MediaTypeFormatter。
在您的示例中,appId
可能会传递给IValueProvider
...,如ElementalValueProvider。