Sha*_*lle 40 asp.net-mvc attributes http-get http-post
所以我们有[HttpPost],它是一个可选属性.据我所知,这会限制调用,因此只能通过HTTP POST请求进行调用.我的问题是为什么我要这样做?
Mik*_*erg 58
想象一下:
[HttpGet]
public ActionResult Edit(int id) { ... }
[HttpPost]
public ActionResult Edit(MyEditViewModel myEditViewModel) { ... }
Run Code Online (Sandbox Code Playgroud)
除非ActionMethodSelectorAttributes HttpGet
和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" />
}
Run Code Online (Sandbox Code Playgroud)
这将呈现以下HTML:
<form action="/MyController/Edit" method="post">
<input type="text" name="email" placeholder="Enter email">
<input type="submit" value="Sign Up">
</form>
Run Code Online (Sandbox Code Playgroud)
提交表单时,它将向控制器执行Http Post请求.具有该HttpPost
属性的操作将处理该请求.
因此,您可以使用多个使用相同名称的Actions,您可以使用HttpPost属性来标记在Post请求上处理哪个方法,如下所示:
public ActionResult ContactUs()
{
return View();
}
[HttpPost]
public ActionResult ContactUs(ContactUsModel model)
{
//do something with model
return View();
}
Run Code Online (Sandbox Code Playgroud)
对于HttpGet和HttpPost的最佳实践,在任何Web开发中使用HttpPost进行创建,更新和删除(数据修改)都是很好的做法.帖子很好,因为它们需要提交表单,以防止用户在电子邮件,社交网站等中点击有毒链接(例如[ https://www.mysite.com/Delete/1])并无意中更改数据.如果你基本上只是阅读数据HttpGet工作得很好.
有关更深入的安全性考虑因素以及验证令牌提高安全性的原因,请参阅OWASP.
归档时间: |
|
查看次数: |
90930 次 |
最近记录: |