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

MVC控制器自定义Action出现HTTP Error 404.0 - Not Found问题求助

解决MVC中自定义Route的Action出现404错误的问题

咱们一步步来排查你遇到的404问题,从最常见的原因入手:

1. 确认属性路由已启用

你的Action用了[Route]属性路由,但如果项目没开启属性路由支持,这个规则根本不会生效。去App_Start/RouteConfig.cs里检查,必须包含这行关键代码:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // 必须启用这行才能让属性路由生效,要放在传统路由配置之前
    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

如果之前没加routes.MapMvcAttributeRoutes();,加上后重启项目再试试。

2. 验证生成的链接是否匹配路由规则

你用@Url.Action("CategoryBlogs","Blog",new { id = "MVC.Net" })生成链接,先查看页面源码,确认实际生成的href是不是/Blog/CategoryBlogs/MVC.Net——这是你[Route]属性定义的路径。如果生成的是/Blog/CategoryBlogs?id=MVC.Net这类格式,说明传统路由覆盖了属性路由的规则。

这种情况下,你可以给属性路由加个名称,用Url.RouteUrl生成精准匹配的链接:

第一步:给Action的Route属性命名

[Route("Blog/CategoryBlogs/{id}", Name = "CategoryBlogsRoute")] 
public ActionResult CategoryBlogs(string id) { 
    CategoryOperations co = new CategoryOperations(); 
    category c = co.GetCategory(id); 
    return View(db.blogs.Where(x => x.categoryId == c.Id).ToList()); 
}

第二步:用RouteUrl生成链接

<a href='@Url.RouteUrl("CategoryBlogsRoute", new { id = "MVC.Net" })'>MVC.Net</a>

这样就能确保生成的链接严格遵循你定义的属性路由规则。

3. 检查控制器名称和路由根路径

确认你的控制器类名是BlogController(必须以Controller结尾),这样Url.Action里的"Blog"才是正确的控制器名称。另外,如果你的路由是嵌套在其他路由下的,可以给Route属性加波浪线~强制使用根路径:

[Route("~/Blog/CategoryBlogs/{id}")] 

4. 排查参数特殊字符的问题

你的参数是MVC.Net,包含点号.,MVC默认允许这类参数,但如果你的路由配置里加了参数约束(比如{id:int}),会导致匹配失败触发404。检查你的Route属性有没有额外约束,有的话去掉即可,因为你需要的是字符串类型的id。

按照上面的步骤排查,应该能解决你的404问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:14:34