如何反序列化请求主体AsSingleObject同时也从路由传递参数?

如何反序列化请求主体AsSingleObject同时也从路由传递参数?

问题描述:

我有这样一个非常标准的路线,{controller}/{action}/{id},其中id是可选的。如何反序列化请求主体AsSingleObject同时也从路由传递参数?

考虑这三个PUT操作:

public void DoSimpleStuff(int id) {/*DoingStuff*/ } 
public void DoMoreStuff(StronglyTypedObject sto) {/*DoingStuff*/ } 
public void DoExtraStuff(int id, StronglyTypedObject sto) {/*DoingExtraStuff*/ } 

DoSimpleStuff开箱的。

为了我需要disable the model binder DoMoreStuff工作。所以我实现了自定义IRequestContentReadPolicy返回RequestContentReadKind.AsSingleObject

然而,这并不解决DoExtraStuff。

所以我的问题是,我能做些什么来解决DoExtraStuff?该路线不应该理解只有最后一个参数来自内容,因此将该类型传递给我的序列化程序?

PS:我知道他们会改变这项工作如何,但我现在需要一个解决方案。创意答案表示赞赏

在asp.net的MVC 4测试版,这是很难做到的。事实上,我必须解决它,因为我没有找到一种方法(如果有的话)来实现这一目标。

但是,在asp.net mvc 4 rc中,您只需将[FromBody][FromUrl]属性应用于您的动作参数,并且您可以轻松前往。太好了! :)