ฉันต้องการจัดการ POST ของ API-Call ต่อไปนี้:
/v1/location/deviceid/appid
พารามิเตอร์เพิ่มเติมมาจาก Post-Body
ทั้งหมดนี้ใช้ได้ดีสำหรับฉัน ตอนนี้ฉันต้องการขยายโค้ดของฉันโดยอนุญาตให้ "deviceid" และ / หรือ "appid" และ / หรือ BodyData เป็นโมฆะ:
/v1/location/deviceid
/v1/location/appid
/v1/location/
URL ทั้ง 3 นี้ควรตอบสนองด้วยเส้นทางเดียวกัน
แนวทางแรกของฉัน (จำเป็นต้องใช้ 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);
}
สิ่งนี้ใช้ไม่ได้และส่งกลับข้อผิดพลาดในการคอมไพล์:
"พารามิเตอร์ทางเลือกต้องอยู่ท้าย"
ลองครั้งต่อไป:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
ตอนนี้ฟังก์ชันของฉัน AddNewLocation () จะได้รับเสมอBodyData=null
- แม้ว่าการโทรจะส่ง Body ก็ตาม
ในที่สุดฉันก็ตั้งค่าพารามิเตอร์ทั้ง 3 ตัวเลือก:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
อย่าทำงาน:
พารามิเตอร์ตัวเลือกไม่ได้รับการสนับสนุนโดย
BodyData
FormatterParameterBinding
เหตุใดฉันจึงต้องการโซลูชันที่มีพารามิเตอร์เสริม My Controller จัดการเฉพาะ "การเพิ่มตำแหน่งใหม่" ผ่าน POST
ฉันต้องการส่งข้อมูลที่ไม่ถูกต้องข้อยกเว้นหรือข้อความแสดงข้อผิดพลาดของฉันเอง แม้ว่าการโทรจะไม่มีค่าก็ตาม ในกรณีนี้ฉันต้องการให้สามารถตัดสินใจทิ้งข้อยกเว้นหรือการตั้งค่าเริ่มต้นด้วยรหัสของฉัน
?
ภายในเทมเพลตเส้นทางคือสิ่งที่ฉันกำลังมองหา +1