Несколько необязательных параметров с ServiceStack.Net - PullRequest
14 голосов
/ 15 октября 2011

Я пытаюсь реализовать службу с несколькими дополнительными параметрами, используя 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}");

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

1 Ответ

27 голосов
/ 16 октября 2011

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

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

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

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

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

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