在没有更改数据时使用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 .

在没有更改数据时使用httpget

您的问题是您的控制器中有两个具有相同名称的方法。动作解析器无法决定使用哪一个

最简单的方法是遵循命名约定,在这种情况下你不需要添加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动词更好地描述了服务操作,但也许你有很好的理由不这样做。