次のAPI呼び出しのPOSTを処理したい:
/v1/location/deviceid/appid
追加のパラメータはポストボディから取得されます。
これはすべて私にとってうまくいきます。ここで、「deviceid」や「appid」、および/またはBodyDataをnullにして、コードを拡張します。
/v1/location/deviceid
/v1/location/appid
/v1/location/
これら3つのURLは同じルートで応答する必要があります。
私の最初のアプローチ(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
。
オプションのパラメーターを含むソリューションが必要なのはなぜですか?私のコントローラーは、POSTを介して「新しい場所の追加」だけを処理します。
自分の例外またはエラーメッセージを間違ったデータで送信したい。呼び出しに欠損値がある場合でも。この場合、コードで例外をスローするか、デフォルトを設定するかを決定できるようにしたいと考えています。
?
ルートテンプレートの内部は私が探していたものです。+1