使用IIS启动ASP.NET Core应用时API控制器是否可正常运行?
问题结论与排查方案
通过IIS启动带API控制器的ASP.NET Core项目本身不存在任何兼容性问题,404错误可按以下方向逐一排查:
- 检查服务与中间件配置:如果此前项目仅使用SignalR,大概率漏加了控制器相关的注册逻辑。.NET 6及以上版本的
Program.cs中需要补充两处配置:- 服务注册阶段添加:
builder.Services.AddControllers(); - 中间件管道配置阶段添加:
app.MapControllers();,注意该配置需要放在app.UseRouting()之后、app.Run()之前,和现有app.MapHub<>的配置平级即可。
- 服务注册阶段添加:
- 校验请求URL:你当前控制器的路由配置为
[Route("api/[controller]")],MessagesController对应的路由前缀为api/Messages,GET请求的完整地址应为{你的站点根地址}/api/Messages,注意检查拼写、端口号、路径前缀是否和实际请求的一致。 - 确认控制器可被扫描:确保控制器类的访问修饰符为
public,没有添加[NonController]等阻止扫描的特性,你当前贴出的代码符合要求,可再确认实际运行的代码有没有误改。 - IIS托管配置校验:
- 确认服务器上已安装和项目.NET版本匹配的ASP.NET Core Hosting Bundle,安装后需要重启IIS才会生效
- 确认站点对应的应用池.NET CLR版本设置为
无托管代码
你代码中MessagesController构造函数注入的DataContext未在Action中使用,该问题不会导致404,若后续路由通了之后报500错误可再处理该冗余代码即可。
内容的提问来源于stack exchange,提问作者יוני ארליך
相关产品推荐
相关产品推荐

