You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.net MVC路由问题:点击客户链接出现404错误求助

问题分析与解决方案

嗨,这个问题其实很好排查——你的Details方法标记了[HttpPost]特性,但@Html.ActionLink生成的是GET请求,两者不匹配,所以请求根本找不到对应的处理方法,直接返回404了。

为什么会这样?

@Html.ActionLink本质上是生成一个标准的<a>标签,用户点击这个链接时,浏览器会发送一个GET请求到对应的路由地址。但你给控制器的Details方法加了[HttpPost]特性,这就相当于给这个方法加了一个“门禁”——只允许POST请求进入,GET请求过来自然会被路由系统判定为“找不到资源”,也就是404错误。

怎么解决?

最简单的修复方式就是移除[HttpPost]特性(ASP.NET MVC中Action方法默认就是接收GET请求的),或者把它改成[HttpGet]:

// 移除HttpPost特性,或者替换为HttpGet
public ActionResult Details(int id) {
    var customer = GetCustomers().SingleOrDefault(x => x.Id == id);
    if (customer == null) {
        return HttpNotFound();
    }
    return View(customer);
}

另外可以顺手检查一下你的路由配置,确保默认路由({controller}/{action}/{id})是正常启用的,不过一般默认项目里这个都是配置好的,只要上面的特性改对,问题就能解决。

额外小提示

如果是需要处理POST请求的场景(比如提交表单),那不能用ActionLink,得用<form>标签或者AJAX来发送POST请求。但查看客户详情这种操作,用GET请求才符合RESTful的设计规范,所以上面的修改完全合理。

内容的提问来源于stack exchange,提问作者Muhammad Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:58