You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:44:58