したがって、オプションの属性である[HttpPost]があります。これは呼び出しを制限するので、HTTP POST要求によってのみ行うことができます。これを行う理由は何ですか?
以下を想像してください:
[HttpGet]
public ActionResult Edit(int id) { ... }
[HttpPost]
public ActionResult Edit(MyEditViewModel myEditViewModel) { ... }
ActionMethodSelectorAttributesHttpGet
およびHttpPost
が使用されている場合を除き、これは不可能です。これにより、編集ビューを簡単に作成できます。すべてのアクションリンクは、コントローラーを指すだけです。ビューモデルがfalseを検証した場合は、再び編集ビューに戻ってください。
私は大胆に、これがASP.NET MVCの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>
フォームが送信されると、コントローラーに対してHttp Postリクエストが実行されます。 HttpPost
属性を持つアクションがリクエストを処理します。
HttpGetおよびHttpPostのベストプラクティスに関する限り、Web開発では、作成、更新、削除(データの変更)にHttpPostを使用することをお勧めします。投稿はフォーム送信が必要であるため、ユーザーは電子メールやソーシャルサイトなどでポイズニングされたリンク([- https://www.mysite.com/Delete/1] )をクリックできません。 。不注意によるデータの変更。あなたが基本的にデータを読むだけなら、HttpGetはうまく機能します。
詳細なセキュリティの考慮事項と、検証トークンがセキュリティを高める理由については、 [〜#〜] owasp [〜#〜] を参照してください。
そのため、同じ名前を使用する複数のアクションを持つことができます。HttpPost属性を使用して、Postリクエストで処理されるメソッドを次のようにマークできます。
public ActionResult ContactUs()
{
return View();
}
[HttpPost]
public ActionResult ContactUs(ContactUsModel model)
{
//do something with model
return View();
}
これは主に、同じ名前の2つのアクションを持つことができるようにするためです。1つはGETで使用され、ユーザー入力用のフォームを表示します。このようにアクションが区別されない場合、どのアクションがリクエストを処理するのかを解決できないため、エラーが発生します。