0

在 azure API 管理中如何设置 405(不允许方法)策略。我正在使用 azure API 管理 API 并添加不同的策略,例如 jwt 验证、IP 过滤、速率限制等等。但我找不到添加 APIM 中不允许的 405 方法的方法。我想为每种方法设置它。这意味着我想阻止来自 APIM 的传入无法识别的方法请求。(例如:Get 而不是 POST(APIM 不允许抛出 405 方法)。目前 APIM 将错误的方法传递给后端,并从应用程序返回 404。任何人都知道我们如何阻止来自 APIM 端的错误请求并返回 405将其传递给后端并返回 404?

4

1 回答 1

0

您可以使用控制流策略以及每个方法的入站策略上的上下文变量来拦截任何与定义的 http 方法不匹配的请求,然后使用设置状态策略返回 405。所以对于 GET 方法来说沿着:

<policies>
  <inbound>
    <choose>
      <when condition="@(context.Request.Method.ToString() != "GET")">
        <return-response>
          <set-status code="405" reason="No Content" />
        </return-response>
      </when>
    </choose>
    <base />
  </inbound>
  ... rest of policies
</policies>

如果您有多个具有相同路径的方法,您可能需要在 API 级别而不是方法级别应用它,并使条件等于未使用的方法而不是不等于使用的方法

要在 API 级别设置它并检查未使用的方法集合,请创建以下策略:

<policies>
  <inbound>
    <choose>
      <when condition="@{
        ICollection<string>  disallowedMethods = new List<string>() { "POST", "PUT" };
        return disallowedMethods.Contains(context.Request.Method.ToString());           
      }">
        <return-response>
          <set-status code="405" reason="No Content" />
        </return-response>
      </when>
    </choose>
    <base />
  </inbound>
  ... rest of policies
</policies>

此示例中未使用的 http 方法是 POST 和 PUT,但您可以将列表更改为适用于您的用例的任何内容。

于 2020-07-28T19:41:35.517 回答