为Edit方法添加[HttpPost]后出现HTTP 404资源未找到问题
解决ASP.NET MVC中ActionLink导致的HTTP 404错误
这问题我踩过好几次坑,大概率是路由匹配、Action参数或者ActionLink的写法不对导致的,咱们一步步来排查解决:
1. 先确认Controller和Action的基础配置
首先得确保你的后台代码没问题:
- 你的Controller类必须叫 MemberController(ASP.NET MVC强制要求Controller后缀,少了这个路由根本找不到)
- 里面必须有一个
EditMember的Action方法,而且要正确接收MemberID参数,注意参数名要和你传递的一致(C#大小写敏感),示例代码:public class MemberController : Controller { public ActionResult EditMember(int memberID) { // 这里写你的业务逻辑,比如根据ID获取会员信息 return View(); } }
2. 修正ActionLink的写法(最常见的问题!)
你现在的ActionLink代码少了关键的参数命名和Controller指定,导致生成的URL不符合路由规则。正确的写法应该用四参数重载:
@Html.ActionLink("Rediger", "EditMember", "Member", new { memberID = item.MemberID }, null)
解释下每个参数:
"Rediger":链接显示的文本"EditMember":要调用的Action名称"Member":对应的Controller名称(不用加Controller后缀)new { memberID = item.MemberID }:路由参数,必须明确指定参数名,不然MVC不知道这个值对应Action的哪个参数null:用来传递HTML属性(比如class、id),不需要的话就传null
3. 检查路由配置是否匹配
打开项目里的路由配置文件(传统MVC是RouteConfig.cs,ASP.NET Core是Program.cs/Startup.cs),确认路由模板能匹配你的请求:
比如传统MVC的默认路由:
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
如果你的Action参数是memberID而不是默认的id,有两种解决办法:
- 把Action的参数名改成
id,这样就能匹配默认路由 - 给Action加
[Route]特性,自定义路由:[Route("Member/EditMember/{memberID}")] public ActionResult EditMember(int memberID) { // ... }
4. 验证生成的HTML链接
右键页面查看源代码,看看这个ActionLink生成的<a>标签的href属性是什么。比如正确的应该是/Member/EditMember?memberID=123或者/Member/EditMember/123,如果生成的URL是/EditMember/123或者/?MemberID=123,那就能直接定位到是ActionLink没指定Controller或者参数没命名的问题。
按照上面的步骤排查,基本就能解决这个404问题了!
内容的提问来源于stack exchange,提问作者MOR_SNOW
相关产品推荐
相关产品推荐

