Azure 检查是否设置了查询参数

Azure 检查是否设置了查询参数,azure,query-parameters,azure-api-management,Azure,Query Parameters,Azure Api Management,在Azure API管理中,我需要检查是否设置了查询参数。为了实现这一点,我尝试使用context.Request.Url.Query.GetValueOrDefault(queryParameterName:string,defaultValue:string) 根据,这个表达式的工作原理如下- 如果找不到参数,则返回逗号分隔的查询参数值或defaultValue 考虑到这一点,我使用MS博客中的示例创建了以下策略- <set-variable name="uniqueId" value

在Azure API管理中,我需要检查是否设置了查询参数。为了实现这一点,我尝试使用
context.Request.Url.Query.GetValueOrDefault(queryParameterName:string,defaultValue:string)

根据,这个表达式的工作原理如下-

如果找不到参数,则返回逗号分隔的查询参数值或defaultValue

考虑到这一点,我使用MS博客中的示例创建了以下
策略-

<set-variable name="uniqueId" value="@(context.Request.Url.Query.GetValueOrDefault("uniqueId", ""))" />

鉴于MS文档似乎不准确,我如何检查是否设置了查询参数?

因此这里的答案是存在(另一个)MS错误

最初创建API操作时,根据需要设置了
uniqueId
query参数。我更改了此选项,以便在添加问题中描述的策略之前不需要此选项,但是新Azure门户中的一个错误意味着,当您取消选中查询参数旁边的required框,然后保存更改时,这些更改将被忽略

我可以在OpenAPPI规范视图中编辑YAML模板,删除相关查询参数的声明
required:true
,从而解决这个问题。我的策略中的表达式现在按预期工作


请注意:此解决方案揭示了另一个错误,保存模板会导致您的策略被删除,因此请确保先复制一份。

因此这里的答案是存在(另一个)MS错误

最初创建API操作时,根据需要设置了
uniqueId
query参数。我更改了此选项,以便在添加问题中描述的策略之前不需要此选项,但是新Azure门户中的一个错误意味着,当您取消选中查询参数旁边的required框,然后保存更改时,这些更改将被忽略

我可以在OpenAPPI规范视图中编辑YAML模板,删除相关查询参数的声明
required:true
,从而解决这个问题。我的策略中的表达式现在按预期工作


请注意:此解决方案揭示了另一个错误,保存模板会导致您的策略被删除,因此请确保您先复制一份。

嘿,David,很抱歉给您带来麻烦。我相信(但不确定)这个问题与你描述的有点不同。UI中的“required”属性目前只是一个文档提示。真正的驱动程序是UrlTemplate。我猜以前uniqueId是在UrlTemplate的查询字符串中定义的。这就是操作匹配所需的条件。我认为当您更改OpenAPI描述并保存它时,会从UrlTemplate中删除参数。不幸的是,我们使用路径和方法作为策略的键。因此它们消失了。我们在Azure门户中的OpenAPI编辑器上有很多工作要做。因为OpenAPI不支持我们所做的一切,所以往返有时会很困难。希望在我们添加对OpenAPI V3的支持时,我们能够解决您遇到的此类问题。无论如何,感谢您抽出时间发布您的问题并提供您的答案。@Darreller-感谢您的回复。我今天注意到,
uniqueId
确实列在“查询”下,与昨天的“模板”相反,因此您的怀疑可能是正确的。真正伟大的是,如果在门户中添加一些工具提示来解释一些事情,比如UI中的“required”属性目前只是一个文档提示,因为它根本不是obvioius,我在我(简短)的文档回顾中找不到任何提及。完全同意。我们知道我们的文档需要大量的爱。我们正在努力实现这一目标。请继续抱怨这些文件。它实际上帮助了我们。我还希望看到APIM实际执行所需的属性。嘿,大卫,很抱歉让你这么痛苦。我相信(但不确定)这个问题与你描述的有点不同。UI中的“required”属性目前只是一个文档提示。真正的驱动程序是UrlTemplate。我猜以前uniqueId是在UrlTemplate的查询字符串中定义的。这就是操作匹配所需的条件。我认为当您更改OpenAPI描述并保存它时,会从UrlTemplate中删除参数。不幸的是,我们使用路径和方法作为策略的键。因此它们消失了。我们在Azure门户中的OpenAPI编辑器上有很多工作要做。因为OpenAPI不支持我们所做的一切,所以往返有时会很困难。希望在我们添加对OpenAPI V3的支持时,我们能够解决您遇到的此类问题。无论如何,感谢您抽出时间发布您的问题并提供您的答案。@Darreller-感谢您的回复。我今天注意到,
uniqueId
确实列在“查询”下,与昨天的“模板”相反,因此您的怀疑可能是正确的。真正伟大的是,如果在门户中添加一些工具提示来解释一些事情,比如UI中的“required”属性目前只是一个文档提示,因为它根本不是obvioius,我在我(简短)的文档回顾中找不到任何提及。完全同意。我们知道我们的文档需要大量的爱。我们正在努力实现这一目标。请继续抱怨这些文件。它实际上帮助了我们。我还希望看到APIM实际执行所需的财产。
    "backend": [
        {
            "source": "configuration",
            "timestamp": "2017-09-07T12:42:13.8974772Z",
            "elapsed": "00:00:00.0003536",
            "data": {
                "message": "Unable to identify Api or Operation for this request. Responding to the caller with 404 Resource Not Found."
            }
        }
    ],