[解決済み] Web Api の属性ルーティングにおけるオプションパラメータ
質問
以下のAPI-Callの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
- を送信するようになりました。
最後に、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を介して新しい場所の追加を処理します。
間違ったデータに対して、私自身の例外またはエラーメッセージを送信したいのです。たとえ呼び出しに欠落した値があったとしてもです。この場合、例外を投げるか、自分のコードでデフォルトを設定するかを決定できるようにしたいです。
どのように解決するのですか?
のような着信リクエストに対して
/v1/location/1234
のようなリクエストに対して、Web API が自動的に '1234' に対応するセグメントの値が
appid
に関連していて
deviceid
.
ルートテンプレートは以下のように変更した方が良いと思います。
[Route("v1/location/{deviceOrAppid?}", Name = "AddNewLocation")]
のように変更してから
deiveOrAppid
を解析してidの種類を把握します。
また、ルートテンプレート自体のセグメントはオプションにする必要があり、そうしないとセグメントは必須とみなされます。また
?
という文字に注意してください。
例えば
[Route("v1/location/{deviceOrAppid?}", Name = "AddNewLocation")]
関連
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] 関数を終了するには?
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] ASP.NET Web APIのカスタムメソッド名
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】C#におけるtypedefの等価性
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。