HttpPost方法未被调用,ActionLink请求提示资源找不到
问题分析与解决办法
兄弟,我一眼就看出问题所在了——你这是请求类型不匹配导致的资源找不到错误!
为什么会出错?
@Html.ActionLink默认生成的是GET请求的锚点链接,当你点击这个链接时,浏览器会发起一个GET请求去访问Dashboard/RemoveActivity。但你的RemoveActivity方法标记了[HttpPost]特性,这意味着这个方法只接受POST请求,完全不处理GET请求,所以服务器自然找不到对应的资源,就抛出了"The resource cannot be found."的错误。
两种解决办法
办法一:让Action接受GET请求(不推荐)
如果你一定要用ActionLink的方式,可以移除方法上的[HttpPost]特性,让它接受GET请求:
public ActionResult RemoveActivity(int id) { activityRepo.Delete(activityRepo.GetById(id)); return RedirectToAction("ActivityDetails"); }
注意:这种方式有安全风险!GET请求会把删除的ID暴露在URL里,而且可能被搜索引擎爬虫、误点等意外触发,导致数据被误删,所以非常不推荐用于删除操作。
办法二:用表单提交POST请求(推荐做法)
这是删除操作的标准做法,把ActionLink换成表单,通过按钮提交POST请求:
@using (Html.BeginForm("RemoveActivity", "Dashboard", new { id = a.Id }, FormMethod.Post)) { <button type="submit" class="btn btn-link">Remove</button> }
这样点击按钮时,浏览器会发起POST请求,正好匹配你标记了[HttpPost]的RemoveActivity方法,就能正常执行删除逻辑并跳转了。
内容的提问来源于stack exchange,提问作者Teije
相关产品推荐
相关产品推荐

