Я хочу создать REST веб-сервиса с помощью ASP.net WebAPI на .net 4.5ASP.net WebAPI Параметр Связывание сложного типа из URI
Urls должен быть в формате, как это:
/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001
Соответствующий контроллер выглядит следующим образом:
[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}
Где Демография является пользовательским объектом, который в основном только DTO с определенными свойствами. Однако, она содержит одно свойство, которое имеет тип пользовательского перечисления:
enum Gender
{
Female = 0,
Male
}
отображение по умолчанию работает просто отлично, если URL имеет выше формат. Однако, конечно, мне также нужно проверить правильность параметров, предоставляемых URL-адресом.
ASP.net WebApi (afaik) по умолчанию пытается сопоставить каждый параметр на основе предполагаемого типа (или если он может быть преобразован в этот тип). Если он не может найти подходящее значение в URI, он предположил, что он равен 0.
Теперь это приводит меня к очень неудачной ситуации, когда 0 по определению все еще является допустимым значением для Gender Demographics.Gender (0 ~ Пол. Женский).
Простейшим решением было бы изменить перечисление так, чтобы 0 было «неопределенным» состоянием, которое я мог проверить. Однако я не могу изменить перечисление. Я мог бы создать свою собственную перегрузку для объекта Demographics, но предпочел бы этого не делать, потому что я думаю, что должен быть более приятный способ.
Могу ли я привязать параметр gender к параметру в URI и выбросить исключение, если оно не было отправлено?
Я читал о преобразователях типов, но мне пришлось бы работать с строкой URI и думать, что мне придется реализовать много функциональных возможностей, которые, по-видимому, уже есть в WebApi.
Пожалуйста, имейте в виду, что я должен работать с URI и не могу использовать Тело запроса.