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