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

.NET Core 3.1 Web API部署IIS后指定接口返回404问题咨询

问题成因
  • 端点配置缺失属性路由映射:你当前Startup.cs的UseEndpoints方法仅配置了传统MVC路由规则,没有添加MapControllers()方法启用API属性路由匹配。本地运行在Kestrel调试模式下会默认兼容属性路由,生产环境IIS托管模式下会严格按照配置加载路由规则,导致带参数的多段属性路由无法匹配。
  • 中间件顺序错误:UseCors中间件放在了UseAuthorization之后,不符合ASP.NET Core中间件执行顺序要求,部分请求会被授权拦截提前返回404。
  • IIS托管配置异常:生产环境未安装对应版本的ASP.NET Core 3.1托管捆绑包,或站点web.config中AspNetCoreModuleV2处理程序配置错误,导致带路径参数的请求无法正确转发到Kestrel处理。
  • 参数匹配失败:Config方法的参数是Guid类型,如果请求传入的{id}不符合GUID格式,模型绑定失败会直接返回404,无法匹配到对应Action。
解决方案

1. 修正端点路由配置

修改Startup.cs的UseEndpoints代码,添加属性路由支持:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers(); // 新增此行,启用API属性路由匹配
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

2. 调整中间件执行顺序

将UseCors移到UseRouting之后、身份认证中间件之前,符合官方推荐顺序:

app.UseRouting();
app.UseCors("CorsPolicy"); // 移到此处
app.UseAuthentication();
app.UseAuthorization();

3. 优化路由配置(可选,避免路由冲突)

简化WidgetController中Config方法的路由配置,控制器上已经定义了api/[controller]前缀,无需在Action路由中重复定义:

[HttpGet("config/{id:guid}")] // 新增guid类型约束,非法参数会返回400方便排查
public ActionResult Config(Guid id)
{
    return Ok(service.GetWidgetConfig(id));
}

4. 检查IIS托管配置

  • 确认生产环境已安装ASP.NET Core 3.1 托管捆绑包,安装完成后重启IIS服务生效
  • 检查站点根目录下的web.config配置,确保处理程序配置正确,参考配置如下:
<?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=".\你的项目名称.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

5. 错误排查(可选)

如果修改后仍然存在问题,可临时将web.config中的stdoutLogEnabled设置为true,创建logs目录,查看运行日志定位具体错误。

内容的提问来源于stack exchange,提问作者Mark Seymour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:24:03