ASP.NET Core应用API端点异常:前端报错及authors端点不存在
问题背景
ASP.NET Core应用存在无法定位的错误,每次访问前端都会触发该错误,localhost/api/authors无法正常访问,已编写AuthorController.cs定义/api/Author相关端点并配置Startup.cs,但问题未解决。
错误截图:
核心问题与修复步骤
1. 路由路径不匹配
你的AuthorController使用属性路由[Route("api/[controller]")],[controller]会自动替换为控制器名称去掉Controller后缀(即Author),所以正确的访问路径是localhost/api/Author,而你访问的是localhost/api/authors(复数),直接导致404错误。
修复:
- 要么访问正确路径
api/Author - 要么修改控制器的路由属性为
[Route("api/authors")](复数形式)
2. 数据库上下文缺少Author实体集
AppDbContext中仅定义了DbSet<YourEntity>,但控制器中使用_context.Authors调用实体集,这会引发编译错误,导致运行时无法响应请求。
修复:
在AppDbContext类中添加Author实体的DbSet:
public DbSet<Author> Authors { get; set; }
同时补充定义Author实体类(代码中未提供,需自行添加),示例:
public class Author { public int Id { get; set; } public string Name { get; set; } = string.Empty; // 根据业务需求添加其他属性 }
3. 命名空间引用缺失
AuthorController位于Pencraft.Controllers命名空间,而AppDbContext在Pencraft_app.pencraft_backend命名空间下,控制器未引用该命名空间,导致AppDbContext无法被识别,编译失败。
修复:
在AuthorController.cs顶部添加命名空间引用:
using Pencraft_app.pencraft_backend;
4. 中间件顺序错误与路由冲突
代码中app.UseCors("AllowOrigin")的注释标注需放在UseRouting()之前,但实际顺序颠倒,会导致CORS策略不生效,前端请求可能因跨域被拦截。此外,API控制器已使用属性路由,无需额外配置传统路由,否则会引发路由冲突。
修复:
调整中间件顺序为正确的执行流程:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseDefaultFiles(); app.UseStaticFiles(); app.UseRouting(); app.UseCors("AllowOrigin"); // 必须在UseRouting之后、UseEndpoints之前 app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapRazorPages(); }); }
同时删除Startup中多余的传统路由配置(MapControllerRoute相关代码),避免路由冲突。
5. 连接字符串配置验证
确保appsettings.json中已正确配置DefaultConnection连接字符串,示例:
{ "ConnectionStrings": { "DefaultConnection": "Server=.;Database=YourDatabaseName;Trusted_Connection=True;TrustServerCertificate=True;" } }
验证流程
- 修复所有编译错误(实体定义、命名空间、DbSet配置)
- 启动应用,访问正确的API路径
localhost:<端口>/api/Author - 若仍存在跨域问题,确认中间件顺序正确,CORS策略已生效
内容的提问来源于stack exchange,提问作者Phx_DPyrexx

