我想在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 ,它将传递给IValueProviderIModelBinder ...

所以...

在您的示例中Field(取决于内容类型协商的结果)将使用以下之一:XmlMediaTypeFormatterJsonMediaTypeFormatterFormUrlEncodedMediaTypeFormatter。因此,您可以使用它们各自的设置(例如, JSON.NET设置...或实现您自己或包装的MediaTypeFormatter。

在您的示例中,appId可能会传递给IValueProvider ...,例如ElementalValueProvider

09-28 10:24