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 方法正好用于操作要从数据库中删除的对象。如果我是对的,你能解释一下吗?如果没有 - 为什么?如果是 - 请告诉我如何以好的方式实现该方法。
将 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,我认为在您的情况下,您不会因该限制而获得好处。