Chcę utworzyć usługa REST przy użyciu asp.net WebAPI na .net 4.5ASP.net WebAPI Parametr Wiązanie typu złożonego z URI
Urls powinien być takim formacie jak poniżej:
/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001
Powiązany kontroler wygląda następująco:
[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}
Gdzie demografia jest obiektem niestandardowym, który jest w zasadzie tylko DTO o określonych właściwościach. Jednakże zawiera jedną właściwość, która ma typ niestandardowy ENUM:
enum Gender
{
Female = 0,
Male
}
Domyślne odwzorowanie działa dobrze, jeśli adres URL jest z powyższym formacie. Muszę jednak oczywiście sprawdzić, czy parametry podane przez adres URL są poprawne.
ASP.net WebApi (afaik) domyślnie próbuje zmapować każdy parametr na podstawie przyjętego typu (lub jeśli można go przekonwertować na ten typ). Jeśli nie może znaleźć pasującej wartości w identyfikatorze URI, wydaje się, że jest to tylko 0.
Teraz to prowadzi mnie do bardzo niefortunnej sytuacji, w której 0 z definicji jest poprawną wartością dla płci Demograficznej.Gender (0 ~ Gender.Female).
Najprostszym rozwiązaniem jest zmiana wyliczenia, aby 0 było stanem "nieokreślonym", który mógłbym sprawdzić. Nie mogę jednak zmienić wyliczenia. Mogłem utworzyć własne przeciążenie dla obiektu Demographics, ale wolałbym tego nie robić, ponieważ myślę, że musi być lepszy sposób.
Czy mogę jednoznacznie powiązać parametr płci z parametrem w identyfikatorze URI i zgłosić wyjątek, jeśli nie został przesłany?
Czytałem o konwerterach typów, ale musiałbym pracować nad ciągiem URI i sądzę, że będę musiał wdrożyć wiele funkcji, które podobno ma już WebApi.
Należy pamiętać, że muszę pracować nad identyfikatorem URI i nie mogę korzystać z treści żądania.