Использует ли строковые переменные запроса URL все еще RESTful - PullRequest
1 голос
/ 27 ноября 2009

У меня проблема с использованием строковых переменных запроса в приложении RESTful Asp.net MVC. Это нарушает шаблон RESTful?

Дело в том, что Asp.net MVC использует маршрут по умолчанию, например:

/controller/action/id

Я должен пройти через другую комбинацию контроллер + действие, например:

/controller/action/id/controllerX/actionX

но это не сработает, если я попаду в корень моего приложения, потому что первые три параметра будут опущены, а последние два будут рассматриваться как первая пара.

Вместо этого я испытываю желание использовать эту запись вместо:

/controller/action/id?Param=controllerX/actionX

Что также будет работать на root

http://domain/?Param=controllerX/actionX

Но разве это ОТДЫХ?

Немного объяснений

Я хочу иметь более модульный подход к моим представлениям, чем обычный встроенный в PartialViews. Потому что, если у меня есть частичное представление, которое отображается на многих страницах, я должен добавить видеоданные для этого конкретного частичного представления в каждое действие контроллера , которое возвращает представление, которое использует это частичное частичное представление. И я думаю, что это неправильный способ делать вещи. Контроллеры становятся зависимыми от частичных представлений, которые могут (или не дай бог не могут ) быть частью основного представления.

рендеринг действий вместо частичных представлений приходит на помощь. Я использую свой собственный Html.RenderAction(), который вызывает действие какого-либо контроллера, который подготавливает только свои собственные данные. Отлично, это отлично работает.

Первая проблема была с методом HTTP, который был распространен на все действия RenderAction. Так что я изменил его, и я могу контролировать метод HTTP, как мне нравится. Некоторые действия всегда могут использовать GET независимо от того, был ли опубликован основной вид (таким образом, с помощью POST).

Проблема в том, что эти действия возвращают частичные представления со своими собственными элементами FORM. Так как мои под действия не могут быть непосредственно опубликованы (потому что они не будут знать, какой вид возвращать), они фактически публикуют в этом представлении. У всех вложенных действий с формами обычно есть распространенный метод HTTP из основного представления, поэтому они фактически войдут в выполнение действия обратной передачи.

Дело в том, что только фактическая форма, которая была отправлена ​​обратно, должна выполнять свое действие POST. Другие должны просто использовать метод GET. Здесь моя вторая пара контроллер / действие вступает в игру. Каждая форма подэтапа отправляется обратно на

mainViewController/action/?PostForm=controller/action

, где второй параметр помогает решить, какой рендеринг вспомогательного действия должен распространять на него метод POST. Эта конкретная форма будет проверена, как определено в ее действии после публикации.

Надеюсь, это объясняет мою проблему более конкретным примером. Эта проблема связана с моим вчерашним вопросом .

1 Ответ

3 голосов
/ 27 ноября 2009

Если этот URL приведет к тому же представлению, возвращенному независимо от сеанса, файлов cookie или предыдущей истории просмотра клиента, тогда да, это будет то, что вы называете RESTful.

...