【问题标题】:Azure pipeline gate - Invoke Rest API Error - The api-version query parameter (?api-version=) is required for all requestsAzure 管道门 - 调用 Rest API 错误 - 所有请求都需要 api-version 查询参数 (?api-version=)
【发布时间】:2021-05-27 19:48:14
【问题描述】:

我有一个部署 API 的天蓝色管道。部署后,我有一个门将调用 API 并在部署到下一个环境之前检查成功状态。 问题是每次运行此门时都会出现此错误:

2021-05-27T19:42:30.3298765Z GET https://management.azure.com/https://apim-myapi.azure-api.net/api/Vehicle/Makes?year=2017?api-version=2020-09-01.12.0
                Response Code: 0
                Response: An error was encountered while processing request. Exception: {"error":{"code":"MissingApiVersionParameter","message":"The api-version query parameter (?api-version=) is required for all requests."}}
Exception Message: The remote server returned an error: (400) Bad Request. (type WebException)
                Evaluation of expression 'eq(root['status'], 'successful')' failed.
                
Exception Message: Error parsing API response into a JSON object. (type DistributedTaskException)

我尝试向我正在使用的 URL 添加不同的版本,但我总是遇到同样的错误。 尽管看起来我正在传递它想要的价值!

有人用过这个门法吗?版本控制参数如何工作?

更新:添加我正在使用的门设置:

【问题讨论】:

  • 看起来您将 api-version 添加到您的 api。也许改为通过(内联)powershell向您的api发出请求?
  • 在postman中运行这个api看看会不会出现400错误。错误 400 可能是 api url 本身的问题。
  • 我可以从 Azure 的测试门户很好地调用 API。它不需要 API 版本。只有当我从门口的这个任务中调用它时。我也可以在 azure 之外调用它,它不是必需的。

标签: azure-devops azure-pipelines azure-api-management


【解决方案1】:

我不明白为什么您的请求看起来像这样:

GET https://management.azure.com/https://apim-myapi.azure-api.net/api/Vehicle/Makes?year=2017?api-version=2020-09-01.12.0

这是一个电话还是两个电话?因为在我看来,您提出了两个请求并收到了两个错误。

所以第一个是https://management.azure.com,这是APIM REST API 地址。对于这个调用,当你这样调用它时,你会得到MissingApiVersionParameter 错误,因为它需要你指定api-version 参数。

另一方面,您还调用了您的 API https://apim-myapi.azure-api.net/api/Vehicle/Makes?year=2017?api-version=2020-09-01.12.0(根据您的描述,这是您想要做的)并且您得到了 Evaluation of expression 'eq(root['status'], 'successful')' failed. 这显然是 api 策略的错误。

api-version 参数与您的 API 调用无关。所以从你的调用中删除https://management.azure.comapi-version,然后调用https://apim-myapi.azure-api.net/api/Vehicle/Makes?year=2017(这就是你的API 请求的样子)并关注expression failed 错误。

【讨论】:

  • 我不确定电话的第一部分来自哪里。我添加了我用于门的设置。也许 URL 后缀和参数需要更改?
  • 好的,我修好了电话。它现在返回一个有效的响应。我创建了一个通用端点,而不仅仅是调用 APIM。现在我在返回值评估方面遇到了问题,但我会在另一个问题中问这个问题
【解决方案2】:

我使用的是 Azure 资源管理器连接类型,这就是 API URL 不正确的原因。 我将其更改为通用端点,并在我的 URL 后缀和参数中添加了“/api/Vehicle/Makes?year=2017”。该调用现在成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多