Tôi muốn tạo một webservice REST của sử dụng ASP.net WebAPI trên .net 4.5ASP.net WebAPI Parameter Ràng buộc để loại phức tạp từ URI
url nên có một định dạng như thế này:
/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001
Bộ điều khiển được liên kết trông giống như sau:
[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}
Trong đó Nhân khẩu học là đối tượng tùy chỉnh về cơ bản chỉ là DTO với các thuộc tính nhất định. Tuy nhiên, nó chứa một tài sản mà có loại một enum tùy chỉnh:
enum Gender
{
Female = 0,
Male
}
Các ánh xạ mặc định chỉ hoạt động tốt nếu URL là các định dạng trên. Tuy nhiên, tất nhiên tôi cũng cần phải kiểm tra xem các thông số được cung cấp bởi url có đúng không.
ASP.net WebApi (afaik) theo mặc định cố gắng ánh xạ từng thông số dựa trên loại giả định (hoặc nếu nó có thể được chuyển đổi thành loại đó). Nếu nó không thể tìm thấy một giá trị phù hợp trong URI nó xuất hiện để giả định nó chỉ là 0,
Bây giờ điều này sẽ đưa tôi đến một tình huống rất đáng tiếc khi 0 theo định nghĩa vẫn là giá trị hợp lệ cho giới tính dân số.Gender (0 ~ Giới tính. Đồng tính).
Giải pháp đơn giản nhất là thay đổi enum để 0 sẽ là trạng thái "không xác định" mà tôi có thể kiểm tra. Tuy nhiên, tôi không thể thay đổi enum. Tôi có thể tạo ra quá tải của riêng mình cho đối tượng Nhân khẩu học nhưng không muốn làm điều này, bởi vì tôi nghĩ rằng phải có một cách đẹp hơn.
Tôi có thể ràng buộc rõ ràng thông số giới tính với thông số trong URI và ném ngoại lệ nếu nó không được gửi?
Tôi đọc về trình chuyển đổi loại nhưng tôi sẽ phải làm việc trên chuỗi URI và nghĩ rằng tôi sẽ phải triển khai nhiều chức năng mà WebApi dường như đã có.
Hãy nhớ rằng tôi phải làm việc trên URI và không thể sử dụng Nội dung yêu cầu.