Aşağıdaki API Çağrısının POST'unu işlemek istiyorum:
/v1/location/deviceid/appid
Post-Body'den ek Parametreler geliyor.
Bunların hepsi benim için iyi çalışıyor. Şimdi "deviceid" ve / veya "appid" ve / veya BodyData'nın boş olmasına izin vererek kodumu genişletmek istiyorum:
/v1/location/deviceid
/v1/location/appid
/v1/location/
Bu 3 URL aynı yoldan yanıt vermelidir.
İlk yaklaşımım (BodyData gerekli):
[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);
}
Bu çalışmaz ve bir derleme hatası döndürür:
"isteğe bağlı Parametreler en sonunda olmalıdır"
Sonraki deneyin:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
Şimdi benim fonksiyonum AddNewLocation () her zaman bir BodyData=null
- çağrı Vücut'u gönderse bile.
Sonunda 3 Parametrenin tümünü isteğe bağlı olarak ayarladım:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
Çalışmayın:
İsteğe bağlı parametre
BodyData
tarafından desteklenmezFormatterParameterBinding
.
Neden isteğe bağlı Parametrelerle bir çözüm istiyorum? Denetleyicim bir POST yoluyla yalnızca "yeni bir Konum eklemeyi" yönetir.
Yanlış verilere kendi istisnalarımı veya hata mesajlarımı göndermek istiyorum. Çağrıda eksik değerler olsa bile. Bu durumda, koduma göre bir istisna veya Ayar Varsayılanları atmaya karar verebilmek istiyorum.
?
rota şablonunun içinde aradığım şey vardı. +1