23

我想在 ASP.Net Web API 中创建一个自定义模型绑定器。有很多关于如何从头开始执行此操作的资源,但我想利用现有功能。

我在 codeplex 上查看了源代码,可以看到那里有很多模型绑定器,但大多数都是密封的……即使这样,我也无法确定在哪种情况下使用哪个模型绑定器。

这是我的api方法头:

public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field)

我想要做的基本上是在填充了所有基本属性之后拦截模型绑定器,然后根据我将在客户端设置的 http 请求标头设置一些额外的值。

正如我所说,我很乐意创建自定义模型绑定器和模型绑定器提供者并将它们连接起来,我遇到的问题是尝试重用提供的现有功能。

谢谢,皮特

4

1 回答 1

14

在此处查看WebApi的扩展点。

DefaultModelBinderWebApi中的 MVC 没有完全等价的。

如果您正在使用该[FromBody]属性,FormatterParameterBinding则将调用 aMediaTypeFormatter并使用 a 来构建您的模型。

URI 路径和 Url(查询参数)的模型绑定器将调用ModelBinderParameterBinding,它们将传递给 aIValueProvider或 a IModelBinder...

所以...

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

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

于 2013-02-05T11:09:56.050 回答