2014-01-20 3 views
1

У меня есть таблица журналов для пользователей и вы хотите извлечь записи по userId и параметрам datetime. Как я могу создать маршрут конфигурацию, так что мои URLs могут быть такими, как:нужна помощь для конфигурации mvc routing

Журналов/Идентификатор_пользователь/

Журналов/Идентификатор_пользователь/год/

Журналов/Идентификатор_пользователь/год/месяц/

Журналы/USERID/год/месяц/день/

и мой метод действия, как это:

[HttpGet] 
public ActionResult Read(int? userId, int? year, int? month, int? day) 
{ 

} 

Обязательно я не хочу только одного маршрута, если это решение с некоторыми маршрутами, которые я ценю, но я хочу, чтобы синтаксис метода действия мог как можно выше, если это было возможно. Спасибо.

+0

Что происходит, когда идентификатор пользователя и месяц предоставляются, но не год или день? Как выглядит ваш URL-адрес? – danludwig

+0

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

+0

Что не так: route.MapRoute ( имя: «Журналы», URL: «logs/{user}/{year}/{month}/{day}", defaults: new {controller = "Logs ", action =" Details ", user = UrlParameter.Optional, year = UrlParameter.Optional, month = UrlParameter.Optional, day = UrlParameter.Optional} ); – ganders

ответ

0

Только последний параметр в маршруте может быть дополнительным. Я предлагаю вам сделать свой маршрут следующим образом:

Logs/{userid} 

... и использовать для ввода остальных параметров.

Logs/{userid}?year=2014&month=1&day=20 

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

Logs/{userId}/{date?} 
Logs/{userId}/2014 
Logs/{userId}/2014-01 
Logs/{userId}/2014-01-20 

[HttpGet] 
public ActionResult Read(int userId, string date = null) 
{ 

} 
+0

поблагодарить u за простой и элегантный soluton –

Смежные вопросы