C#
1ルーティングはRouteConfig.csで行なっている 2api/{controller}/{action}/{id} 3というルーティングを書いている。 4 5// SomeController 6// api/some/values/12345 のようなURIがルーティングされる 7pubic HttpResponseMessage values(string id, [FromBody]ValueParam param) 8{ 9} 10 11public class ValueParam { 12 public string id { get;set; } //これがnull 13 14 public string name { get; set;} 15}
api/some/values/12345 に対して nameプロパティを持ったjsonをPUTします。
json
1// putでbodyに渡されるjson 2 { "name" : "abcde" }
name はユニークのため自身のnameと一致しているか、使われていないnameであれば有効という
カスタムバリデーションを ValueParam埋め込みたいと思っています。
そのためには idに値が入っている必要がありますが、idはURIに含まれているため
ValueParamには入ってきません。
URIに含まれる{id}をActionパラメータの引数オブジェクトで受け取る方法をご教授いただきたいです。
isValidの判定については ValidationFilterを作成して一括でBadRequestを返します。
アンチパターン
[FromBody]で受け取れるようにリクエストbodyにidを含める
I/FとしてURLとリクエストパラメータに重複するidが含まれてしまう。
URIのidとリクエストbodyに含まれるidが一致することを判定するコードをActionメソッド内部で書かなければいけない
サーバー側のフレームワークの制限でApiのI/Fを変えるのは本来の解決策ではない。
idをURIに含めない(Restfulもどき)
Restfulの設計なのでフレームワークの制限でURIは変えられない。
あなたの回答
tips
プレビュー