所以我們有[HttpPost],它是一個可選屬性。我知道這限制了通話,所以只能通過HTTP POST請求來完成。我的問題是爲什麼我想要這樣做?HttpPost vs MVC中的HttpGet屬性:爲什麼要使用HttpPost?
回答
想象一下以下內容:
[HttpGet]
public ActionResult Edit(int id) { ... }
[HttpPost]
public ActionResult Edit(MyEditViewModel myEditViewModel) { ... }
除非ActionMethodSelectorAttributesHttpGet
和HttpPost
用在了這將是不可能的。 這使得創建編輯視圖非常簡單。所有的操作鏈接都直接指向控制器。如果視圖模型驗證爲false,則只需再次彈回到編輯視圖。
我會大膽的說,這是最好的實踐,當涉及到在ASP.NET MVC CRUD的東西。
編輯:
@TheLight問什麼,需要在視圖完成後。這只是一個POST方法的表單。
使用剃刀,這看起來像這樣。
@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
屬性的動作將處理該請求。
這主要是爲了讓您可以有兩個操作具有相同的名稱, 一個這是對GET和可能用於顯示用戶輸入和員額正在使用的其他形式,當用戶提交的顯示形式原始的GET。如果操作沒有以這種方式區分,則由於無法解析哪個操作旨在處理請求而發生錯誤。
它讓你可以有使用相同名稱的多個操作,您可以使用HttpPost屬性,以紀念其方法大幹快上,像這樣一個POST請求處理:
public ActionResult ContactUs()
{
return View();
}
[HttpPost]
public ActionResult ContactUs(ContactUsModel model)
{
//do something with model
return View();
}
也許最好注意POST請求有可能以某種方式改變數據庫的狀態或修改網站的內部數據。這就是網絡抓取工具從不遵循這些網址的原因。 – vbocan 2011-03-17 05:38:04
我不認爲今天的爬蟲對於改變一個人的數據庫或者修改內部數據都不在乎。如果抓取工具能成功找到通過post請求處理程序的方式,那麼這是不足的 – 2012-03-16 06:55:18
- 我將在服務器端進行驗證。爲什麼抓取程序不主動跟蹤帖子請求是因爲有無數的請求排列,並且在大多數情況下,它們使用Captcha等進行保護。 – 2012-03-16 07:01:34
爲HTTPGET至於最佳實踐和HttpPost,在任何Web開發中使用HttpPost進行創建,更新和刪除(數據修改)都是很好的做法。 Post很好,因爲他們需要表單提交,這可以防止用戶點擊電子郵件,社交網站等中的有毒鏈接(例如[https://www.mysite.com/Delete/1])),並且無意中更改數據。如果你基本上只是閱讀數據HttpGet的偉大作品。
請參閱OWASP瞭解更深入的安全考慮以及驗證令牌爲何會提高安全性。
- 1. asp.net mvc - [HttpPost/HttpGet]與[AcceptVerbs(HttpVerbs.Post/Get)]
- 2. 爲什麼要選擇HttpGet/HttpPost方法超過kSoap?
- 3. MVC HttpPost屬性不起作用
- 4. HTTPPOST屬性不能在MVC中工作
- 5. 在HttpPost中隱藏屬性不在HttpGet中
- 6. Android使用HttpPost/HttpGet發送照片
- 7. 差異btwn HttpPost&HttpGet在android
- 8. 爲什麼我不能使用[HttpPost]而不是[HttpPost(「[action]」)]?
- 9. 如何將HttpGet轉換爲HttpPost?
- 10. ASP.NET MVC 5 HttpPost
- 11. HttpPost創建MVC
- 12. 在asp.net MVC中的HttpPost 4
- 13. Android:使用來自HttpPost的Cookie用於HttpGet的示例
- 14. asp.net mvc validate [HttpPost] ActionResult()
- 15. 怎麼辦httpPost使用C#
- 16. 爲什麼MVC堅持HttpGet?
- 17. ASP.NET MVC 3:如何強制ActionLink執行HttpPost而不是HttpGet?
- 18. 使用HttpPost
- 19. ASP.NET MVC 2中的httppost,httpput等屬性如何工作?
- 20. 爲什麼SelectList SelectedValue在HttpGet上工作,但不在HttpPost上工作?
- 21. 爲什麼[HttpPost]只能選擇'EditorFor'?
- 22. 標識具有MethodInfo的HTTPPost()屬性
- 23. 通用的HttpPost,HttpGet,HttpPut等的所有目的的實現
- 24. 在android中的httppost和httpget方法之間的區別?
- 25. ViewModel在Model中沒有使用HttpPost Create方法設置屬性
- 26. HTTPPost MVC 4個Web API
- 27. Java 8 HttpClient 4.5在一個函數中的HttpGet和HttpPost
- 28. 我們可以使用帶有[HttpPost]屬性的JsonRequestBehavior.AllowGet嗎?
- 29. ASP.NET MVC中PartialView的HttpPost方法4
- 30. 部分視圖HttpPost被調用而不是HttpGet
嗨Mikael,我喜歡你的答案,但我看到一個小的更正。 HttpGet和HttpPost不是ActionFilters,但它們是ActionSelectors。作爲名稱,ActionSelectors與ActionFilters不同。如果您看到源代碼都是HttpGet和HttpPost,則它們源自直接從屬性派生的ActionMethodSelectorAttribute。你可以將ActionFilters這個詞替換成ActionSelectors嗎? – VJAI 2013-01-10 10:08:29
謝謝你的擡頭,馬克! – 2013-01-10 13:50:18
應該在視圖上寫下什麼內容才能發佈到此操作? – 2013-02-26 10:03:51