ASP.NET MVC C#应用自定义路由访问/Users/Login返回404错误如何解决
问题根因排查
- 核心问题1:仅存在POST类型的Login Action,无法响应GET请求
你当前UsersController中仅定义了标记[HttpPost]的Login方法,仅能处理登录表单提交的POST请求。而浏览器直接访问/Users/Login、页面跳转链接的请求都是GET类型,没有对应Action响应,自然返回404。 - 问题2:路由配置冗余且匹配顺序可能错误
你自定义的Login路由规则和ASP.NET MVC默认路由规则完全一致,没有实际作用。如果该路由写在默认路由的下方,会被优先级更高的默认路由拦截,自定义规则完全不生效。 - 其他可能原因:视图路径错误、缺失目标Action
- Login.cshtml未放置在正确路径:需确认文件放在
~/Views/Users/Login.cshtml位置 - 登录成功后跳转的
UserDashBoard未定义对应Action,也可能跳转后返回404
- Login.cshtml未放置在正确路径:需确认文件放在
解决方法
- 新增GET类型的Login Action
在UsersController中添加无参数的GET登录方法:
// GET: Users/Login public ActionResult Login() { return View(); }
原有POST类型的Login方法无需修改。
- 优化路由配置
两种方案二选一即可:
- 方案1:删除你自定义的Login路由,使用默认路由即可匹配
/Users/Login的访问请求,无需额外定义规则 - 方案2:如果要保留自定义路由,需将该路由移动到RouteConfig.cs中所有路由的最顶部,保证优先匹配。
- 补充校验
- 确认
UserDashBoardAction已在对应Controller中定义,且存在对应视图 - 确认UsersController类的访问修饰符为public
内容的提问来源于stack exchange,提问作者Las Sincas
相关产品推荐
相关产品推荐

