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

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托管捆绑包,避免版本不兼容。
  • 检查站点处理程序映射:
    1. 打开IIS管理器,进入目标应用程序,双击「处理程序映射」。
    2. 确认存在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:48:36