ASP.NET MVC: URL-маршрутизация против строки запроса - PullRequest
41 голосов
/ 09 июня 2009

У меня есть страница, перенаправленная как /Comments/Search/3, где я ищу и отображаю все комментарии в теме "3".

Я добавляю функцию сортировки (по дате, автору и т. Д.). Каков наилучший способ справиться с этим? /Comments/Search/3/Sort/Author или /Comments/Search/3?sort=author?

Как автоматически обработать строку запроса sort = author как параметр в MVC?

Спасибо

Ответы [ 3 ]

59 голосов
/ 09 июня 2009

Я предпочитаю: / Комментарии / Поиск / 3? Сортировать = автора. Строка запроса - хорошее место для передачи программных параметров, особенно если параметр (как в этом случае) не важен для целей SEO. Если бы параметр имел некоторое семантическое значение в качестве поискового запроса, первый URL был бы лучше.

В методе контроллера вы можете использовать что-то вроде этого:

public ActionResult Search(int id, string sort)

ASP.NET MVC автоматически подключит значения строки запроса к параметрам вашего метода.

Используйте следующий маршрут

routes.MapRoute(
                   "Default",                                              // Route name
                   "{controller}/{action}/{id}",                           // URL with parameters
                   new { controller = "Comments", action = "Search", id = "" }  // Parameter defaults
               );

/ Комментарии / Поиск / 3? Sort = автор будет вызывать Поиск (3, «автор»)

/ Комментарии / Поиск / 3 вызовет Поиск (3, ноль)

Имейте в виду, что id является обязательным, поэтому этот URL не будет работать: / Комментарии / Поиск

19 голосов
/ 09 июня 2009

ASP.NET MVC будет обрабатывать это автоматически в случае строки запроса. Вы просто добавляете параметр string sort к своему действию.

Что лучше? Лично я использую путь для управления отображаемым содержимым и строку запроса для управления представлением (как оно отображается, форматируется, ...). Итак, для сортировки я бы пошел с методом строки запроса. Но я не думаю, что есть технический недостаток в любом подходе.

2 голосов
/ 09 июня 2009

Лучше всего добавить правило маршрутизации для его обработки. Здесь есть удобная статья:

http://aspalliance.com/1525_ASPNET_MVC_Framework_Part_2_URL_Routing.2

Тогда ваш URL будет читать / Комментарии / Поиск / 3 / Сортировка / Автор

...