在MVC3中,如何获取已发布到我的操作的DataContract属性对象?

时间:2013-03-07 08:53:06

标签: c# .net asp.net-mvc-3 datacontract

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

[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添加到我的MVC3操作中?

1 个答案:

答案 0 :(得分:0)

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

需要额外的布线from here。首先,需要IModelBinder的实现来访问HTTP请求InputStream并使用DataContractSerializer反序列化对象。然后需要CustomModelBinderAttribute的子类,它将从IModelBinder实现返回上述GetBinder()实现。让我们假装它被称为MagicAttribute。完成所有这一切后,只需将属性添加到参数:

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