ASP.NET Core Web API部署至IIS遇404错误:请求路径无匹配候选
解决ASP.NET Core Web API IIS部署404问题的方向
一、排查路由匹配问题
从日志中No candidates found for the request path '/'的信息来看,核心问题是请求路径未匹配到任何端点,需确认路由配置:
- 检查控制器的属性路由:确保控制器类标注了
[ApiController],且路由特性与请求路径匹配。例如要匹配根路径,控制器需配置:[ApiController] [Route("")] public class HomeController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok("All OK"); } } - 若使用传统路由,确认Program.cs中已配置正确的路由模板:
app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); - 检查生产环境配置文件(
appsettings.Production.json),确认没有额外的路由前缀或限制配置。
二、修复IIS处理程序映射错误(HANDLER_PRECONDITION_NOT_MATCH)
该错误表明IIS未正确关联ASP.NET Core托管模块,按以下步骤处理:
- 确认服务器已安装与项目.NET Core版本匹配的ASP.NET Core托管捆绑包,避免版本不兼容。
- 检查站点处理程序映射:
- 打开IIS管理器,进入目标应用程序,双击「处理程序映射」。
- 确认存在
AspNetCoreModuleV2映射,请求路径为*,模块为AspNetCoreModuleV2;若缺失,手动添加模块映射,请求路径填*,选择对应模块并保存。
- 验证应用程序池设置:确保
.NET CLR版本为「无托管代码」,托管管道模式为「集成」。 - 检查发布后的
web.config,确认AspNetCore模块配置正确:
注意<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\YourAppName.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </location> </configuration>processPath和arguments需与发布后的dll文件名对应,hostingModel若为outofprocess需确保模块版本匹配。
三、验证请求路径正确性
若控制器路由为[Route("api/[controller]")],则正确请求路径应为https://<MY HOST NAME>/<MyWebAppName>/api/home(假设控制器名为HomeController),而非根路径。可尝试访问完整路由路径,确认是否能正常返回结果。
四、检查应用启动配置
确认Program.cs中已正确启用控制器路由:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.UseRouting(); app.MapControllers(); // 关键配置,不可遗漏 app.Run();
五、排查权限与日志细节
- 确保应用程序池标识(如ApplicationPoolIdentity)对发布文件夹拥有读取、执行权限。
- 将
web.config中stdoutLogEnabled设为true,查看logs/stdout目录下的日志,获取更详细的启动或运行错误信息。
内容的提问来源于stack exchange,提问作者user23008303
相关产品推荐
相关产品推荐

