したがって、オプションの属性である [HttpPost] があります。これにより呼び出しが制限されるため、HTTP POST 要求によってのみ実行できることを理解しています。私の質問は、なぜこれをやりたいのですか?
4 に答える
次のことを想像してみてください。
[HttpGet]
public ActionResult Edit(int id) { ... }
[HttpPost]
public ActionResult Edit(MyEditViewModel myEditViewModel) { ... }
ActionMethodSelectorAttributes が使用されHttpGet
ていない限り、これは不可能です。HttpPost
これにより、編集ビューの作成が非常に簡単になります。すべてのアクションリンクは、コントローラーを指しているだけです。ビューモデルがfalseと検証された場合は、すぐに編集ビューに戻ります。
私は大胆に、ASP.NETMVCでのCRUDishのことに関してはこれがベストプラクティスであると言います。
編集:
@TheLightは、投稿を完了するためにビューで何が必要かを尋ねました。これは、POSTメソッドを使用した単なるフォームです。
Razorを使用すると、これは次のようになります。
@using (Html.BeginForm())
{
<input type="text" placeholder="Enter email" name="email" />
<input type="submit" value="Sign Up" />
}
これにより、次のHTMLがレンダリングされます。
<form action="/MyController/Edit" method="post">
<input type="text" name="email" placeholder="Enter email">
<input type="submit" value="Sign Up">
</form>
フォームが送信されると、コントローラーに対してHttpPostリクエストが実行されます。HttpPost
属性を持つアクションがリクエストを処理します。
そのため、同じ名前を使用する複数のアクションを持つことができるため、HttpPost属性を使用して、次のようにPostリクエストで処理されるメソッドをマークできます。
public ActionResult ContactUs()
{
return View();
}
[HttpPost]
public ActionResult ContactUs(ContactUsModel model)
{
//do something with model
return View();
}
HttpGet と HttpPost のベスト プラクティスに関する限り、Web 開発では、作成、更新、および削除 (データ変更) に HttpPost を使用することをお勧めします。投稿はフォームの送信を必要とするため、ユーザーが電子メールやソーシャル サイトなどの有害なリンク ([https://www.example.com/Delete/1] など) をクリックして不注意にデータを変更することを防ぐため、優れています。基本的にデータを読み取るだけの場合、HttpGetはうまく機能します。
セキュリティに関するより詳細な考慮事項と、検証トークンによってセキュリティが向上する理由については、OWASPを参照してください。
これは主に、同じ名前の2つのアクションを持つことができるようにするためです。1つはGETで使用され、おそらくユーザー入力用のフォームを表示し、もう1つはユーザーが元のGETで表示されたフォームを送信するときにPOSTで使用されます。このようにアクションが区別されていない場合、リクエストを処理するアクションを解決できないため、エラーが発生します。