HttpDeleteAttribute 不起作用

本文关键字:不起作用 HttpDeleteAttribute | 更新日期: 2023-09-27 18:32:04

在我的控制器中,我尝试了类似的东西:

    [HttpDelete, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Movie movie = db.Movies.Find(id);
        db.Movies.Remove(movie);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

点击后,转向不会访问上述方法。如果缺少什么?也许问题出在带有 html 代码的视图中。我正在使用标准形式,例如:

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <p>
        <input type="submit" value="Delete" formmethod="delete"/> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}

我也尝试了Html.BeginForm("Delete", "Action", FormMethod.Delete)但它不受IntelliSense支持(它表明只有FormMethod.Get和 FormMethod.Post)。

据我所知,Delete 方法正好用于操作要从数据库中删除的对象。如果我是对的,你能解释一下吗?如果没有 - 为什么?如果是 - 请告诉我如何以好的方式实现该方法。

HttpDeleteAttribute 不起作用

将 HttpMethodOverride 添加到您的BeginForm()调用中:

@using (Html.BeginForm()) {
    @Html.HttpMethodOverride(HttpVerbs.Delete)
    @Html.AntiForgeryToken()
    <p>
        <input type="submit" value="Delete" formmethod="delete"/> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}

我认为没有必要将您的操作限制为针对您的场景HttpDelete。改用HttpPost,一切都会很好。

如果您决定使用该方法,则表单应使用 HttpDelete 将请求发送到服务器。

HttpDelete更适合 REST API,我认为在您的情况下,您不会因该限制而获得好处。