Tôi muốn xử lý ĐĂNG của lệnh gọi API sau:
/v1/location/deviceid/appid
Tham số bổ sung đến từ Phần thân.
Tất cả điều này làm việc tốt cho tôi. Bây giờ tôi muốn mở rộng mã của mình bằng cách cho phép "deviceid" và / hoặc "appid" và / hoặc BodyData là null:
/v1/location/deviceid
/v1/location/appid
/v1/location/
3 URL này phải trả lời theo cùng một tuyến.
Cách tiếp cận đầu tiên của tôi (yêu cầu BodyData):
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData)
{
return repository.AddNewLocation(deviceid, appid, BodyData);
}
Điều này không hoạt động và trả về lỗi biên dịch:
"Các tham số tùy chọn phải ở cuối"
Hãy thử tiếp theo:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
Bây giờ, hàm AddNewLocation () của tôi luôn nhận được BodyData=null
- ngay cả khi cuộc gọi gửi Body.
Cuối cùng, tôi đặt tất cả 3 Tham số là tùy chọn:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
Đừng làm việc:
Tham số tùy chọn
BodyData
không được hỗ trợ bởiFormatterParameterBinding
.
Tại sao tôi muốn một giải pháp với các Tham số tùy chọn? Bộ điều khiển của tôi chỉ xử lý việc "thêm một Vị trí mới" thông qua một ĐĂNG.
Tôi muốn gửi trên dữ liệu sai các ngoại lệ hoặc thông báo lỗi của riêng tôi. Ngay cả khi cuộc gọi có giá trị bị thiếu. Trong trường hợp này, tôi muốn có thể quyết định đưa ra một ngoại lệ hoặc Cài đặt Mặc định bằng mã của mình.
?
bên trong mẫu tuyến đường là những gì tôi đang tìm kiếm. +1