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

ASP.NET Core 6部署IIS时,IIS Rewrite修改HTTP_METHOD不生效求助

解决ASP.NET Core 6在IIS上无法识别IIS Rewrite修改的请求方法问题

问题原因

ASP.NET Core托管在IIS上时,依赖ASP.NET Core Module (ANCM) 处理请求转发。ANCM直接与HTTP.SYS交互获取原始请求信息,不会读取IIS Rewrite修改后的HTTP_METHOD变量,因此即使IIS Rewrite日志显示已修改方法,Core应用仍会收到原始的POST请求。

可行解决方案:添加ASP.NET Core中间件处理自定义方法头

放弃IIS Rewrite方案,直接在Core应用内通过中间件识别自定义请求头,修改请求方法,无需改动业务代码。

步骤1:在Program.cs中添加中间件

将以下代码添加到UseRouting()之前,确保中间件先于路由处理请求:

app.Use(async (context, next) =>
{
    // 仅处理POST请求,且存在自定义方法头的情况
    if (context.Request.Method == HttpMethods.Post && 
        context.Request.Headers.TryGetValue("CUSTOM_METHOD", out var customMethodValue))
    {
        var targetMethod = customMethodValue.ToString().ToUpperInvariant();
        // 仅允许转换为PUT或DELETE方法
        if (new[] { HttpMethods.Put, HttpMethods.Delete }.Contains(targetMethod))
        {
            context.Request.Method = targetMethod;
        }
    }
    await next();
});

// 确保中间件在路由之前执行
app.UseRouting();

// 后续的路由、授权等中间件...
app.UseAuthorization();

app.MapControllers();

步骤2:验证客户端请求

确保客户端发送的POST请求包含正确的自定义头:

  • 原PUT请求:发送POST方法,添加请求头CUSTOM_METHOD: PUT
  • 原DELETE请求:发送POST方法,添加请求头CUSTOM_METHOD: DELETE

步骤3:测试验证

启动应用后,用Postman或curl发送测试请求,检查Core应用的日志或接口响应,确认请求方法已被正确转换为PUT/DELETE,RESTful API可正常处理。

注意事项

  • 自定义头名称需与客户端保持完全一致,若客户端使用X-HTTP-Method-Override这类标准头,需修改代码中对应的头名称
  • 中间件需放在路由处理之前,否则路由会先根据原始POST方法匹配接口,导致转换失效
  • 可根据需求扩展允许转换的方法类型,或添加权限校验逻辑

内容的提问来源于stack exchange,提问作者小王虎

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:18:09