创建获取数据的基础Web API:访问myTable接口报404问题求助
问题分析与解决
核心问题:路由不匹配
你的控制器使用[Route("[controller]")]特性,控制器类名为My_Controller,ASP.NET会自动提取控制器名称去掉后缀Controller的部分作为路由前缀,也就是/My_,但你访问的是/myTable/,两者完全不匹配,这是返回404的直接原因。
解决步骤
1. 修正路由,匹配预期路径
直接修改控制器的路由特性,指定为myTable,同时优化控制器基类(API无需视图支持):
[Route("myTable")] [ApiController] public class My_Controller : ControllerBase { private readonly My_Services _services; public My_Controller(My_Services services) { _services = services; } [HttpGet] public async Task<IQueryable<My_Model>> Get() { return await _services.Get_All_Data(); } // 删除Index方法,API不需要返回视图 }
2. 修复服务方法的异步逻辑
你的Get_All_Data标记了async但未使用await,属于无效异步。如果仅需返回延迟执行的查询,可去掉异步标记:
public IQueryable<My_Model> Get_All_Data() { return _context.My_DbSet; // 等价于原LINQ查询,更简洁 }
若需立即执行查询并返回结果集(避免后续延迟执行的潜在问题),可调整为:
public async Task<List<My_Model>> Get_All_Data() { return await _context.My_DbSet.ToListAsync(); }
对应控制器方法同步修改为:
[HttpGet] public async Task<List<My_Model>> Get() { return await _services.Get_All_Data(); }
3. 验证访问路径
修改完成后,访问https://localhost:7048/myTable(末尾斜杠可选),即可获取JSON格式的表数据。
额外优化建议
- API控制器优先继承
ControllerBase,而非Controller,减少不必要的视图相关功能。 - 依赖注入字段使用
private readonly修饰,避免被意外修改。 - 异步方法必须正确搭配
async/await,避免假异步引发的问题。
内容的提问来源于stack exchange,提问作者dave
相关产品推荐
相关产品推荐

