如何反序列化请求主体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]
属性应用于您的动作参数,并且您可以轻松前往。太好了! :)