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

ASP.NET如何配置支持支付回调请求MIME类型解决406报错

错误原因分析

406错误触发的核心原因是IIS静态文件处理模块校验请求MIME类型时不匹配:

  • 你之前添加的.json后缀MIME映射仅对请求路径以.json结尾的接口生效,如果你的回调路由是无扩展名的地址,该配置不会生效
  • 支付服务商的请求头未携带Accept字段,IIS默认校验规则无法匹配到支持的MIME类型,直接拦截请求
可行解决方案

方案1:修改web.config全局配置(推荐)

直接调整IIS的静态文件处理规则,适配无扩展名的路由请求,在web.config的<configuration>节点下添加如下配置:

<system.webServer>
  <staticContent>
    <!-- 移除原有配置避免重复报错 -->
    <remove fileExtension=".json" />
    <remove fileExtension="." />
    <remove fileExtension=".*" />
    <!-- 配置json后缀映射 -->
    <mimeMap fileExtension=".json" mimeType="application/json" />
    <!-- 配置无扩展名请求的MIME映射,适配路由接口 -->
    <mimeMap fileExtension="." mimeType="application/json" />
    <mimeMap fileExtension=".*" mimeType="application/octet-stream" />
  </staticContent>
  <!-- 调整静态文件处理逻辑,允许POST请求通过 -->
  <handlers>
    <remove name="StaticFile" />
    <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
  </handlers>
</system.webServer>

方案2:Global.asax添加请求预处理

如果你不想修改全局IIS配置,可以在Global.asax的Application_BeginRequest方法中手动处理回调请求的头信息,绕过校验:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    // 将路径替换为你实际的支付回调地址
    if (Request.Url.AbsolutePath.StartsWith("/pay/callback"))
    {
        // 手动补全Accept头,适配支付请求
        if (Request.Headers["Accept"] == null)
        {
            Request.Headers.Add("Accept", "application/json, text/plain, */*");
        }
    }
}

方案3:调整回调路由后缀

直接将你的回调路由地址修改为以.json结尾,比如原地址/pay/callback改为/pay/callback.json,你之前添加的.json MIME映射就会生效,无需其他额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:45:03