You need to enable JavaScript to run this app. ASP.NET Core 3.1升级到5后IIS部署报HTTP协议版本映射错误求助
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1升级到5后IIS部署报HTTP协议版本映射错误求助

根因说明

该异常是由于IIS转发到ASP.NET Core 5进程的请求中,存在不符合官方预定义范围的HTTP协议版本号,HostFiltering中间件读取请求Protocol属性时触发了内置参数校验逻辑,直接抛出未处理异常。测试环境无报错是因为测试流量来源统一,不存在非标准的畸形请求,生产环境公网流量复杂,包含大量爬虫、探测工具发起的异常请求,因此触发该问题。

解决思路

  • 优先升级托管运行时:确认生产环境安装的ASP.NET Core 5托管捆绑包版本,升级到.NET 5最终正式版(5.0.17)对应的托管捆绑包,排除.NET 5早期版本IIS集成模块的已知Bug
  • 排查前端流量设备:检查生产站点前置的负载均衡、WAF、反向代理设备配置,确认是否存在转发时篡改HTTP协议版本号的异常配置
  • 调整IIS站点配置:可临时关闭站点的HTTP/2功能测试,若错误消失则进一步排查客户端与IIS的HTTP/2协商兼容问题
  • 新增前置中间件拦截异常:在中间件管道最开头(HostFiltering中间件注册之前)添加自定义拦截逻辑,提前处理协议版本异常:
app.Use(async (context, next) =>
{
    try
    {
        // 主动触发Protocol读取,提前捕获异常
        _ = context.Request.Protocol;
    }
    catch (ArgumentOutOfRangeException)
    {
        // 手动赋值为合法默认协议版本
        var requestFeature = context.Features.Get<Microsoft.AspNetCore.Http.Features.IHttpRequestFeature>();
        requestFeature.Protocol = "HTTP/1.1";
    }
    await next();
});

验证方案

开启生产环境IIS的失败请求跟踪功能,捕获触发异常的原始请求报文,确认异常请求的协议版本具体值,可从流量入口侧直接拦截对应非法请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:15:05