Saya ingin menangani POST dari Panggilan API berikut:
/v1/location/deviceid/appid
Parameter tambahan berasal dari Post-Body.
Ini semua bekerja dengan baik untuk saya. Sekarang saya ingin memperpanjang kode saya dengan mengizinkan "deviceid" dan / atau "appid" dan / atau BodyData menjadi null:
/v1/location/deviceid
/v1/location/appid
/v1/location/
3 URL ini harus ditanggapi dengan rute yang sama.
Pendekatan pertama saya (diperlukan 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);
}
Ini tidak berfungsi dan mengembalikan kesalahan kompilasi:
"Parameter opsional harus di akhir"
Percobaan berikutnya:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
Sekarang fungsi saya AddNewLocation () selalu menjadi BodyData=null
- bahkan jika panggilan mengirim Body.
Akhirnya saya mengatur semua 3 Parameter opsional:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
Jangan bekerja:
Parameter opsional
BodyData
tidak didukung olehFormatterParameterBinding
.
Mengapa saya menginginkan solusi dengan Parameter opsional? Kontroler Saya hanya menangani "penambahan Lokasi baru" melalui POST.
Saya ingin mengirim data yang salah pengecualian saya sendiri atau pesan kesalahan. Bahkan jika panggilan tersebut memiliki nilai yang hilang. Dalam hal ini saya ingin dapat memutuskan untuk melempar pengecualian atau Mengatur Default dengan kode saya.
?
di dalam template rute inilah yang saya cari. +1