ASP.NET Core MVC中新API控制器请求返回HTML页面问题求助
问题解决:新增API控制器返回React index.html而非JSON
问题现象
刚学习MVC+Entity Framework,新增对接数据库新表的Mkb10Controller后,请求该控制器时返回React的index.html页面;但第一个ChildrenController可正常返回JSON数据。
原因分析
请求未匹配到API控制器的属性路由,转而触发了MapFallbackToFile("index.html")规则,返回React入口页面。
当前Program.cs中使用的MapControllerRoute是针对传统MVC路由(依赖{controller}/{action}模板),而你的API控制器用的是属性路由([Route("api/[controller]")]),需要专门的MapControllers()方法来启用属性路由匹配,否则属性路由的控制器无法被正确识别。同时路由匹配顺序关键,Fallback规则必须放在所有API和MVC路由之后,否则会优先返回HTML。
解决方案
修改Program.cs的路由配置,添加MapControllers()启用属性路由匹配,并确保它在MapFallbackToFile之前执行:
修改后的Program.cs代码
using Microsoft.EntityFrameworkCore; using TestReact.Models; var builder = WebApplication.CreateBuilder(args); string connection = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddControllers().AddControllersAsServices(); builder.Services.AddDbContext<ClinicContext>(options => options.UseSqlServer(connection)); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // 启用属性路由匹配,处理API控制器的[Route]属性 app.MapControllers(); // 传统MVC路由(按需保留) app.MapControllerRoute( name: "default", pattern: "{controller}/{action=Index}/{id?}"); // Fallback规则放在最后,仅当其他路由不匹配时返回React页面 app.MapFallbackToFile("index.html"); app.Run();
额外检查点
- 确认
Mkb10实体类已正确注册到ClinicContext:public class ClinicContext : DbContext { public ClinicContext(DbContextOptions<ClinicContext> options) : base(options) { } public DbSet<Child> Children { get; set; } // 必须添加该DbSet public DbSet<Mkb10> Mkb10s { get; set; } } - 清理项目并重新生成,确保控制器类被正确编译到程序集中。
内容的提问来源于stack exchange,提问作者xodiz
相关产品推荐
相关产品推荐

