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

如何在Program.cs中设置requestTimeout="00:30:00"替代web.config

问题解答

首先明确:<aspNetCore requestTimeout="00:30:00"/>是IIS ASP.NET Core模块的服务器层面配置,不属于ASP.NET Core应用内部的代码配置范畴,所以无法直接通过Program.cs来设置这个值。不过可以通过以下方式实现自动配置,避免客户手动修改web.config:

1. 发布时自动生成带requestTimeout的web.config

直接修改项目根目录的web.config模板文件(不是发布后生成的文件),添加requestTimeout属性,这样发布到客户服务器时,生成的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="%LAUNCHER_PATH%" 
        arguments="%LAUNCHER_ARGS%" 
        stdoutLogEnabled="false" 
        stdoutLogFile=".\logs\stdout" 
        requestTimeout="00:30:00" 
        hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

发布项目时,这个模板会被用来生成目标服务器上的web.config,客户无需手动修改。

2. 关于应用层面超时与控制器特性的问题

你之前使用的超时中间件(如UseRequestTimeouts)是应用内部的请求超时控制,和IIS模块的requestTimeout是两个不同层级的设置:

  • IIS的requestTimeout是从IIS接收请求到应用返回响应的总时长限制;
  • 应用中间件的超时是应用内部处理请求的时长限制。

如果要让控制器上的[RequestTimeout]特性生效,需要正确配置中间件:

// Program.cs 中配置服务
builder.Services.AddRequestTimeouts(options =>
{
    // 可选:设置默认超时策略
    options.DefaultPolicy = new RequestTimeoutPolicy { Timeout = TimeSpan.FromSeconds(30) };
    // 也可以添加命名策略,供控制器特性引用
    options.AddPolicy("LongRunning", TimeSpan.FromMinutes(30));
});

// 中间件管道中启用超时(需放在路由中间件之前)
app.UseRequestTimeouts();

之后在控制器或Action上使用特性:

// 直接指定超时时间
[RequestTimeout(TimeSpan.FromMinutes(30))]
public async Task<IActionResult> LongRunningAction()
{
    // 业务逻辑
}

// 或者引用命名策略
[RequestTimeout("LongRunning")]
public async Task<IActionResult> AnotherLongRunningAction()
{
    // 业务逻辑
}

之前中间件忽略控制器超时,大概率是因为没有正确配置服务或中间件顺序错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:05:04