在MVC3我如何得到一个数据合约属性的对象,张贴到我的行动

本文关键字:对象 属性 我的 张贴 一个 何得 MVC3 数据 | 更新日期: 2023-09-27 18:02:37

我必须实现一个方法,我声明像这样:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"whatever")]
void MyMethod(InputContainer input);

,其中InputContainer声明为DataContract:

[DataContract(Namespace = "whatever")]
public class InputContainer : IExtensibleDataObject
{
    //[DataMember]s inside
}

现在在我的代码中,我有一个调用将映射到的操作:

[HttpPost]
ActionResult MyMethod()
{
    // How do I get the InputContainer object here?
}

我只看到使用ReadAsAsync()的样本,这是一个依赖于另一个我想避免的程序集。无论如何,我怀疑ReadAsAsync()是我可以复制的一些辅助方法。

我如何获得DataContract属性对象POST ed到我的MVC3动作?

在MVC3我如何得到一个数据合约属性的对象,张贴到我的行动

这无法正常工作。如果我将InputContainer类型的参数添加到我的操作中——它将被默认初始化,POST主体中的值将被忽略。

需要从这里额外布线。首先需要IModelBinder的实现,它将访问HTTP请求InputStream并使用DataContractSerializer对对象进行反序列化。然后需要CustomModelBinderAttribute的子类,它将从GetBinder()实现中返回上述IModelBinder实现。让我们假设它叫做MagicAttribute。所有这些都完成后,只需要将属性添加到参数:

[HttpPost]
ActionResult MyMethod([Magic] InputContainer input)
{
}