在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动作?
这无法正常工作。如果我将InputContainer
类型的参数添加到我的操作中——它将被默认初始化,POST主体中的值将被忽略。
需要从这里额外布线。首先需要IModelBinder
的实现,它将访问HTTP请求InputStream
并使用DataContractSerializer
对对象进行反序列化。然后需要CustomModelBinderAttribute
的子类,它将从GetBinder()
实现中返回上述IModelBinder
实现。让我们假设它叫做MagicAttribute
。所有这些都完成后,只需要将属性添加到参数:
[HttpPost]
ActionResult MyMethod([Magic] InputContainer input)
{
}