在没有更改数据时使用httpget
本文关键字:httpget 数据 | 更新日期: 2023-09-27 18:12:17
我记得我读过&已经被告知你应该只使用[httppost]
对控制器的动作,可能会改变数据(我找不到这些来源虽然-我无法在谷歌上找到任何东西)。
如果你只是在查找数据,你应该使用[httpget]
。
我有2个控制器动作-只用于查找数据,从不改变它。
我试过在ASP中使用两个[httpget]s
。. NET MVC 5控制器:
public ActionResult MyAction(Guid Id)
{
// Id is used to populate the form
}
// I would previously have placed [httppost] here
public ActionResult MyAction(MyObject myobj)
{
// myobj is posted back from the form - but no data is changed in the database, it's just a lookup
}
但是,我得到这个错误:
当前请求的操作'MyAction'的控制器类型'MyController'在以下操作方法之间是不明确的:
编译器有一个模棱两可的方法名称的问题-那么做这件事的最佳实践是什么?
我们必须使用一个表单来明确指定一个不同的动作吗?(这似乎是不优雅和混乱的-它使[httppost]
看起来更简单,更优雅和更简洁,如果是这样的话)。
在没有数据持久化的情况下,我们应该使用[httpget]
吗?
thx .
您的问题是您的控制器中有两个具有相同名称的方法。动作解析器无法决定使用哪一个
最简单的方法是遵循命名约定,在这种情况下你不需要添加attributes:
public ActionResult GetMyAction(Guid Id)
{
// Id is used to populate the form
}
// I would previously have placed [httppost] here
public ActionResult PostMyAction(MyObject myobj)
{
// myobj is posted back from the form - but no data is changed in the database, it's just a lookup
}
但是,如果你想保留你的名字,你必须添加适当的属性:
[HttpGet]
public ActionResult GetMyAction(Guid Id)
{
// Id is used to populate the form
}
// I would previously have placed [httppost] here
[HttpPost]
public ActionResult PostMyAction(MyObject myobj)
{
// myobj is posted back from the form - but no data is changed in the database, it's just a lookup
}
我认为你误解了get和post的基本原理。重要的不是post请求总是改变状态,重要的是get请求永远不会改变状态。一个很好的例子是一个内容管理系统,它经常经历他们的内容莫名其妙地消失,然后才发现网络爬虫正在索引管理页面并跟踪他们删除的超链接,所有这些都使用http get或预取浏览器随机添加或删除购物车项目。
也就是说,我可能仍然会使用不同的操作来创建这两个get,因为get动词更好地描述了服务操作,但也许你有很好的理由不这样做。