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

Azure APIm带尾随斜杠请求返回307,如何配置返回404?

解决Azure APIm尾随斜杠请求返回307暴露原始链接的问题

可以通过配置APIm策略实现你的需求——让非预期场景返回404,仅在主动配置时使用307。以下是两种可行方案:

方案一:入站策略拦截非法请求直接返回404

在API的入站策略中添加逻辑,检查请求URL是否带尾随斜杠且未匹配到合法端点,直接返回404,避免触发默认重定向行为。

示例策略代码:

<inbound>
    <choose>
        <when condition="@(context.Request.Url.Path.EndsWith("/") && 
            !context.Api.Operations.Any(op => 
                op.Method.Equals(context.Request.Method, StringComparison.OrdinalIgnoreCase) && 
                op.UrlTemplate.Equals(context.Request.Url.Path.TrimEnd('/'), StringComparison.OrdinalIgnoreCase)))">
            <return-response>
                <set-status code="404" reason="Not Found" />
                <set-body>{"error": "指定资源不存在"}</set-body>
                <set-header name="Content-Type" exists-action="override">
                    <value>application/json</value>
                </set-header>
            </return-response>
        </when>
    </choose>
    <!-- 保留原有入站策略 -->
</inbound>

该策略会:

  • 检测请求URL是否以斜杠结尾
  • 验证去掉斜杠后的路径+请求方法是否匹配当前API定义的合法操作
  • 若未匹配,直接返回404响应,阻止请求转发到后端

方案二:拦截后端重定向并替换为404

如果307是后端服务返回的,可通过策略阻止APIm跟随重定向,并将307响应替换为404:

<backend>
    <!-- 禁止APIm自动跟随后端重定向 -->
    <forward-request follow-redirects="false" />
</backend>
<outbound>
    <choose>
        <when condition="@(context.Response.StatusCode == 307)">
            <return-response>
                <set-status code="404" reason="Not Found" />
                <set-body>{"error": "指定资源不存在"}</set-body>
                <set-header name="Content-Type" exists-action="override">
                    <value>application/json</value>
                </set-header>
            </return-response>
        </when>
    </choose>
    <!-- 保留原有出站策略 -->
</outbound>

推荐方案

优先选择方案一,因为它能在请求进入APIm的早期阶段拦截非法请求,避免不必要的后端交互,同时精准控制哪些请求返回404,完全符合你“仅主动配置时使用307”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:07:42