Как десериализовать тело запроса AsSingleObject, одновременно передавая параметры из маршрута? - PullRequest
0 голосов
/ 14 марта 2012

У меня есть довольно стандартный маршрут, подобный этому, {controller}/{action}/{id}, где id необязательный.

Рассмотрим эти три действия PUT:

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

DoSimpleStuff работает из коробки.

Чтобы заставить DoMoreStuff работать, мне нужно было отключить связыватель модели . Поэтому я реализовал пользовательский IRequestContentReadPolicy, возвращающий RequestContentReadKind.AsSingleObject.

Однако это не исправляет DoExtraStuff.

Итак, мой вопрос: что я могу сделать, чтобы исправить DoExtraStuff? Разве маршрут не должен понимать, что из содержимого исходит только последний параметр, и поэтому передавать этот тип моему сериализатору?

PS: я понимаю, что они изменят, как это работает, но мне нужно решение для этого сейчас. Творческие ответы приветствуются.

1 Ответ

0 голосов
/ 26 июля 2012

В asp.net mvc 4 beta это было сложно сделать.На самом деле мне пришлось обойти это, так как я не нашел пути (если он был) для этого.

Тем не менее, в asp.net mvc 4 rc вы просто применяете атрибуты [FromBody] и [FromUrl] к своим параметрам действия, и все готово.Ницца!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...