【发布时间】:2024-05-01 13:45:02
【问题描述】:
我定义了一个full-name API,它接受名字和姓氏并将它们组合起来以返回全名:
https://my-org.azure-api.net/my-app/full-name?firstName=John&lastName=Smith
# Returns: John Smith
在 Azure APIM 中,我在 API 架构中将 firstName 和 lastName 参数设置为“必需”。
在入站策略中,我想验证请求中是否存在两者。我发现validate-parameters 政策似乎就是这样做的:
<inbound>
<validate-parameters specified-parameter-action="prevent"
unspecified-parameter-action="detect"
errors-variable-name="validationErrors" />
</inbound>
令我惊讶的是,这并没有解决任何问题!我必须对每个参数进行手动检查(这段代码太冗长了):
<inbound>
<choose>
<when condition="@( context.Request.OriginalUrl.Query.GetValueOrDefault("firstName") == null )">
<return-response>
<set-status code="400" reason="Bad Request" />
<set-header name="Context-Type" exists-action="override">
<value>text/plain</value>
</set-header>
<set-body>'firstName' is required</set-body>
</return-response>
</when>
<when condition="@( context.Request.OriginalUrl.Query.GetValueOrDefault("lastName") == null )">
<return-response>
<set-status code="400" reason="Bad Request" />
<set-header name="Context-Type" exists-action="override">
<value>text/plain</value>
</set-header>
<set-body>'lastName' is required</set-body>
</return-response>
</when>
<otherwise>
</otherwise>
</choose>
</inbound>
有没有更方便的方法来根据 Azure APIM 中的 API 架构验证请求?
【问题讨论】:
-
相同的行为 - 验证不会触发 - 即使使用 api-version=2021-01-01-preview 创建 API - 我会询问产品组