【问题标题】:What is the equivalent of MVC's DefaultModelBinder in ASP.net Web API?ASP.net Web API 中 MVC 的 DefaultModelBinder 的等价物是什么?
【发布时间】:2013-02-05 10:52:54
【问题描述】:

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

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

这是我的 api 方法头:

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

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

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

谢谢,皮特

【问题讨论】:

    标签: c# rest asp.net-web-api model-binding


    【解决方案1】:

    在此处查看WebApi 的扩展点。

    在 WebApi 中,没有与 MVC 的 DefaultModelBinder 完全等价的东西。

    如果您使用[FromBody] 属性,那么FormatterParameterBinding 将被调用,MediaTypeFormatter 将用于构建您的模型。

    URI 路径和 Url(查询参数)的模型绑定器将调用 ModelBinderParameterBinding,这将传递给 IValueProviderIModelBinder...

    所以...

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

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

    【讨论】:

    • 非常感谢...您说的完全正确。我没有只见树木不见森林。现在我只需要找出管理 aync 任务延续的正确方法,我想我已经排序了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2017-07-24
    相关资源
    最近更新 更多