1

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

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

whereInputContainer被声明为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-attributed 对象POST添加到我的 MVC3 操作?

4

1 回答 1

0

这不会开箱即用。如果我在InputContainer我的操作中添加一个类型的参数 - 它将被默认初始化,POST 正文中的值将被忽略。

需要从这里额外接线。首先需要一个实现来IModelBinder访问 HTTP 请求InputStream并使用DataContractSerializer. 然后需要一个从其实现CustomModelBinderAttribute返回上述实现的子类。让我们假设它被称为。完成所有这些后,只需将属性添加到参数:IModelBinderGetBinder()MagicAttribute

[HttpPost]
ActionResult MyMethod([Magic] InputContainer input)
{
}
于 2013-03-21T08:49:22.990 回答