所以我们有[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. .net webapi HttpGet vs HttpPost。为什么HttpGet?
- 2. MVC HttpGet和HttpPost
- 3. 为什么不捕获[HttpGet]和[HttpPost]属性?
- 4. MVC4忽略[HttpGet]和[HttpPost]属性
- 5. asp.net mvc - [HttpPost/HttpGet]与[AcceptVerbs(HttpVerbs.Post/Get)]
- 6. 为什么要选择HttpGet/HttpPost方法超过kSoap?
- 7. MVC HttpPost属性不起作用
- 8. HTTPPOST属性不能在MVC中工作
- 9. 在HttpPost中隐藏属性不在HttpGet中
- 10. Android使用HttpPost/HttpGet发送照片
- 11. HttpGet HttpPost方法偏差
- 12. 差异btwn HttpPost&HttpGet在android
- 13. HttpPost和HttpGet不工作?
- 14. 为什么我不能使用[HttpPost]而不是[HttpPost(“[action]”)]?
- 15. 如何将HttpGet转换为HttpPost?
- 16. MVC中的HttpPost 1
- 17. 为什么HttpPost使用GET方法?
- 18. MVC 3 [HttpPost]
- 19. HttpPost创建MVC
- 20. ASP.NET MVC 5 HttpPost
- 21. 如果我们已经有[HttpPost],为什么需要使用JsonRequestBehavior?
- 22. 型号为NULL在Httppost MVC
- 23. 传递网址到HttpPost和HttpGet
- 24. 在asp.net MVC中的HttpPost 4
- 25. Android:使用来自HttpPost的Cookie用于HttpGet的示例
- 26. 为什么MVC坚持HttpGet?
- 27. 为什么httpPost模型始终为空?
- 28. asp.net mvc validate [HttpPost] ActionResult()
- 29. MVC HttpPost不工作
- 30. mvc httppost href参数
嗨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