.NET Core Web API路由无法访问,访问接口URL报404是否是路由配置错误?
路由配置错误说明及修复方案
你的路由配置存在多处语法和规则错误,直接导致404找不到资源,具体问题和修复方法如下:
具体错误点
- 控制器路由模板语法错误:
[Route("{api/{controller}")]多写了开头的{,且控制器占位符需使用方括号[controller](方括号为系统保留占位符,会自动替换为当前控制器名称,花括号代表自定义路由参数),该写法本身就是不合法的路由模板 - Action路由模板使用了绝对路径:
[Route("/{action}")]开头的/代表这是绝对路由,不会和控制器层级的路由前缀拼接,按照这个写法该接口的实际匹配路径为https://localhost:44381/Employees,和你预期的前缀路径完全不符 - 路由占位符使用错误:你写的
{action}属于自定义路由参数,不是系统自动读取Action名称的占位符,正确的Action名称占位符为[action]
修复代码
方案1:固定Action路由名
[ApiController] [Route("api/[controller]")] public class HomeController : ControllerBase { // 直接指定Action路由名,会和控制器前缀拼接为 api/Home/Employees [HttpGet("Employees")] public IActionResult Employees() { return Ok("All Employees"); } }
方案2:通用路由前缀配置(适合控制器下有多个Action的场景)
[ApiController] // 控制器层级直接拼接action占位符,所有Action都会自动带上前缀 [Route("api/[controller]/[action]")] public class HomeController : ControllerBase { [HttpGet] public IActionResult Employees() { return Ok("All Employees"); } // 其他Action也会自动匹配 api/Home/[Action名] 规则 [HttpGet] public IActionResult Department() { return Ok("All Departments"); } }
额外检查项
确保你的程序启动配置(Program.cs)中已经注册了控制器路由映射,存在如下代码:
app.MapControllers();
修复完成后使用你之前的URL https://localhost:44381/api/Home/Employees 即可正常访问接口。
内容的提问来源于stack exchange,提问作者Srikanth Reddy
相关产品推荐
相关产品推荐

