ASP.NET Core路由配置异常:修改默认路由后出现404错误求助
嘿,这个问题我帮不少开发者排查过,改完默认路由后出现404,大概率是这几个环节没跟上:
确认Account控制器存在且正确定义:你得确保项目里有一个名为
AccountController的类,而且它继承自Controller基类,比如:public class AccountController : Controller { // 你的动作方法 }注意控制器名称要严格匹配路由里的“Account”,虽然Windows系统大小写不敏感,但部署到Linux环境时会因为大小写不匹配触发404,尽量保持一致。
检查Account控制器中是否有公开的Login动作方法:Login方法必须是
public访问修饰符,不能是private或protected,示例如下:public IActionResult Login() { return View(); }方法名称也要完全匹配“Login”,别写成LogIn或者小写的login,MVC路由是区分大小写的(取决于宿主环境配置,但严格匹配更稳妥)。
确认Login视图文件存在:默认情况下,MVC会自动查找
Views/Account/Login.cshtml路径下的视图文件,如果这个文件缺失,即使控制器和方法都正确,也会返回404。如果视图放在自定义路径下,需要在动作方法里手动指定视图路径,比如:return View("~/Views/CustomViews/Login.cshtml");检查中间件顺序是否正确:
app.UseMvc()(或者ASP.NET Core 3.0+的app.UseEndpoints)的位置很关键,它需要放在app.UseStaticFiles()之后,并且不能被其他中间件提前拦截请求。比如如果有自定义的授权中间件或请求拦截中间件,要确保它们的顺序不会让请求还没到达MVC路由就被处理了。适配ASP.NET Core 3.0+的端点路由:如果你的项目是ASP.NET Core 3.0及以上版本,推荐使用端点路由替代旧的
UseMvc方式,配置示例如下:app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Account}/{action=Login}/{id?}"); });混用旧路由系统和新端点路由可能导致路由匹配异常,尽量统一使用一种方式。
内容的提问来源于stack exchange,提问作者Dr.php

