मैं निम्नलिखित एपीआई कॉल के POST को संभालना चाहता हूं:
/v1/location/deviceid/appid
अतिरिक्त पैरामीटर पोस्ट-बॉडी से आ रहे हैं।
यह सब मेरे लिए ठीक काम करता है। अब मैं अपने डिवाइस को "डिवाइसिड" और / या "एपिड" और / या बॉडीडाटा की अनुमति देने के लिए अपने कोड का विस्तार करना चाहता हूं:
/v1/location/deviceid
/v1/location/appid
/v1/location/
इन 3 URL को एक ही मार्ग से जवाब दिया जाना चाहिए।
मेरा पहला दृष्टिकोण (बॉडीडेटा आवश्यक):
[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
- भले ही कॉल बॉडी भेजें।
अंत में मैंने सभी 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
।
मुझे वैकल्पिक पैरामीटर्स के साथ एक समाधान क्यों चाहिए? मेरा नियंत्रक एक POST के माध्यम से बस "एक नए स्थान को जोड़ने" को संभालता है।
मैं गलत डेटा पर अपने स्वयं के अपवाद या त्रुटि संदेश भेजना चाहता हूं। भले ही कॉल में लापता मान हो। इस मामले में मैं अपने कोड द्वारा एक अपवाद या सेटिंग डिफॉल्ट्स को फेंकने का निर्णय लेने में सक्षम होना चाहता हूं।
?
मार्ग टेम्पलेट के अंदर वही है जिसकी मुझे तलाश थी। +1