これが重複している場合は、お知らせください。簡単に調べたところ、私の質問に本当に答えるものが見つからなかったからです。
私は ASP.NET MVC 2 を試しています。Web フォームのバックグラウンドから来て、実際にはHTTP GETとHTTP POSTだけを扱いました。
GET/PUT/POST/DELETEをリポジトリのそれぞれのCRUD操作 (検索、挿入、更新、削除) に適用する方法を確認しようとしています。
次のアクションメソッドを持つ単一のコントローラーがあるとします。
[HttpGet] // GET: /Products/{id}
[ActionName("Products")
public ActionResult Get(int id = 0) { ... }
[HttpPut] // PUT: /Products
[ActionName("Products")
public ActionResult Put(Product product) { ... }
[HttpPost] // POST: /Products/{product}
[ActionName("Products")
public ActionResult Post(Product product) { ... }
[HttpDelete] // DELETE: /Products/{product}
[ActionName("Products")
public ActionResult Delete(Product product) { .. }
それに関するいくつかの質問 - アクションメソッドに名前を付けたり分離したりする方法はありますか? モデル全体 (製品) を通過する必要がありますか、それとも id のみを通過する必要がありますか?
私が抱えている問題は、ビューで関連する HTTP 動詞を使用してこれらのアクション メソッドを呼び出す方法がわからないことです。
この段階では、3 つのビューがあると考えています。
- 「インデックス」 - モデルにバインドし
IEnumerable<Product>
、「編集」、「詳細」、および「削除」リンクを使用してすべての製品を一覧表示します - " Single
Product
" - "Update" ボタンを使用して、製品のすべての詳細を一覧表示する単一のモデルにバインドします。 - 「新規
Product
」 - 「作成」ボタンを使用して、製品を作成するためのフォームを使用して、単一のモデルにバインドします。
だから - 私の質問は、特定のコントローラーメソッドを特定の HTTP 動詞で呼び出すように指定するにはどうすればよいですか?
では、列挙Html.BeginForm
を指定できますが、FormMethod
GET と POST しかありません。
- PUT および DELETE コマンドを実行するにはどうすればよいですか?
- HTTP動詞ごとに個別のビューが必要ですか?
- 「削除」というリンクがある場合、コントローラーに対して HTTP DELETE コマンドを呼び出すことができますか、それともフォーム アクションの削除で新しいビューにリダイレクトする必要がありますか?
それとも、そもそもこれはばかげた/過剰な設計ですか?「GET」と「POST」に固執する必要がありますか?
私はこのスタイルの Web 開発 (REST) に (かなり) 慣れていないので、よろしくお願いします。:)
アップデート
そこで、まさにこのトピックに関する Stephen Walther の興味深い記事を見つけました。
彼は、HTML フォームが GET と POST のみをサポートしていることを示しています (私は REST スタイルの Web 開発に慣れていないため、これを知らなかったので、部分的に恥ずかしく思います)。
どうやら PUT/DELETE でコントローラー アクションを呼び出す唯一の方法は、AJAX を使用することです。真剣に?
では、ここで何をすべきか、GET/POST に固執する必要がありますか、それとも、基になる XmlHttpRequest コードを適切な関数の背後にラップする JavaScript ファイルを作成する必要がありますか?
ASP.NET MVC 開発者はどちらに傾いていますか? 確かに、誰かがこの同じ質問を自問したことがあります。