Подтвердить что ты не робот

Несколько дополнительных параметров с ServiceStack.Net

Я пытаюсь реализовать службу с несколькими необязательными параметрами с помощью ServiceStack.Net

В настоящий момент мой маршрут выглядит следующим образом

Routes.Add<SaveWeek>("/save/{Year}/{Week}");

Я хочу поддерживать uris следующим образом:

/сохранить/2010/12/понедельник/4/вторник/6/среда/7

т.е. понедельник = 4, вторник = 6 и среда = 7

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

то есть. Как и при отсутствии значений параметра

?

понедельник = 4 & среда = 7 & пятница = 6

Конечно, одним из решений было бы иметь следующий маршрут и просто передать 0, когда я не хочу сохранять значение.

Routes.Add<SaveWeek>("/save/{Year}/{Week}/{Monday}/{Tuesday}}/{Weds}/{Thurs}/{Fri}/{Sat}/{Sun}");

Но..... есть ли лучший способ достичь этой функциональности?

4b9b3361

Ответ 1

Когда ваши требования к маршруту начинают усложняться, со временем станет проще просто добавить путь к wild card, чтобы вы могли самостоятельно разобрать оставшуюся часть запроса. то есть в этом случае, поскольку первая часть строки запроса остается постоянной, вы можете добавить отображение дикой карты для хранения переменных частей запроса, то есть:

Routes.Add("/save/{Year}/{Week}/{DaysString*}");

ServiceStack по-прежнему будет заполнять частичный DTO полями Год и Неделя (а также любые поля, которые были переданы в запросе). Остальные переменные части URL-адреса хранятся в DaysString, которые затем можно вручную проанализировать вручную. Таким образом, приведенное выше сопоставление будет соответствовать URL-адресам, например:

/сохранить/2010/12/понедельник/4/вторник/6? Среда = 7

И введите следующие данные в DTO запроса:

  • Год: 2010
  • Неделя: 12
  • Среда: 7
  • DaysString: понедельник/4/вторник/6