是否可以在ASP.NET MVC中使用GET和DELETE谓词标记Action?

时间:2011-03-17 16:26:25

标签: asp.net-mvc rest asp.net-mvc-3

我想GET /Product/1DELETE /Product/1,而不必像DELETE /Product/Delete/1这样单独行动:

例如:

public class ProductController : Controller
{
    [HttpGet]
    [HttpDelete]
    public ActionResult Index(int id) { ... }
}

如何区分动作体内的HTTP动词?

3 个答案:

答案 0 :(得分:3)

我会将逻辑分成两种不同的方法。

如果您需要相同的方法签名但不同的http方法,那么您应该能够执行以下操作:

[HttpGet]
public ActionResult Index(int id) { ... }

[ActionName("index")]
[HttpDelete]
public ActionResult IndexDelete(int id) { ... }

答案 1 :(得分:2)

您不希望在同一操作中使用Get | Delete,因为这只是令人困惑。一种方法没有理由做两件事。 One method does One thing

那太糟糕了。

要解决此问题,请创建一个实际删除的ActionResult,并为其添加HttpDelete属性。

这是这样做的首选方式:

public class ProductController : Controller
{
    public ActionResult Index(int id)
    {
    }

    [HttpDelete]    
    public ActionResult Delete(int id)
    {

    }
}

有关Delete and Get的更多信息,请参阅此处。

答案 2 :(得分:0)

不要这样做。您没有保存任何代码,也无法将幂等GET与潜在危险DELETE混合使用。如果他们有不同的缓存要求怎么办?还是不同的授权?