Asp.net mvc 在ASP.NET MVC中是否可以同时使用GET和DELETE谓词标记操作?

Asp.net mvc 在ASP.NET MVC中是否可以同时使用GET和DELETE谓词标记操作?,asp.net-mvc,rest,asp.net-mvc-3,Asp.net Mvc,Rest,Asp.net Mvc 3,我希望执行GET/Product/1和DELETE/Product/1,而不必执行DELETE/Product/DELETE/1这样的单独操作: 例如: public class ProductController : Controller { [HttpGet] [HttpDelete] public ActionResult Index(int id) { ... } } 如何区分动作体中的HTTP动词?不要这样做。您没有保存任何代码,也没有从混合使用幂等GET和潜

我希望执行GET/Product/1和DELETE/Product/1,而不必执行DELETE/Product/DELETE/1这样的单独操作:

例如:

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

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

不要这样做。您没有保存任何代码,也没有从混合使用幂等GET和潜在危险的DELETE中获益。如果它们有不同的缓存要求呢?还是不同的授权

不要这样做。您没有保存任何代码,也没有从混合使用幂等GET和潜在危险的DELETE中获益。如果它们有不同的缓存要求呢?还是不同的授权

我将把逻辑分为两种不同的方法

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

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

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

我将把逻辑分为两种不同的方法

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

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

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

您不希望在同一个操作上使用Get | Delete,因为这会让人困惑。没有理由用一种方法做两件事

那太糟糕了

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

这是最好的方法:

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

    [HttpDelete]    
    public ActionResult Delete(int id)
    {

    }
}

请参阅此处了解更多信息。

您不希望在同一操作中使用Get | Delete,因为这会让人困惑。没有理由用一种方法做两件事

那太糟糕了

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

这是最好的方法:

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

    [HttpDelete]    
    public ActionResult Delete(int id)
    {

    }
}

有关详细信息,请参见此处。

谢谢,但我在问题中特别提到了这一点,而不是执行DELETE/Product/DELETE/1,其中URL中的DELETE是操作。对不起,如果我不清楚的话。@johansson不清楚:你不应该做你想做的事。这不是一个好的设计。谢谢,但我在我的问题中特别提到了这一点,而不是执行DELETE/Product/DELETE/1,其中URL中的DELETE就是操作。对不起,如果我不清楚的话。@johansson不清楚:你不应该做你想做的事。这不是一个好的设计,这很有效。谢谢我忘记了ActionName装饰程序。如果您想避免使用ActionName,还可以执行[HttpDelete]公共ActionResult索引id,字符串foo{}。这很有效。谢谢我忘记了ActionName装饰程序。如果要避免使用ActionName,还可以执行[HttpDelete]公共ActionResult Indexint id,字符串foo{}。