Операция подстановочного знака управления API Azure возвращает 404

Я создал операцию подстановочного знака в APIM для Teamtailor API https://api.teamtailor.com/v1 Когда я делаю запрос, он вызывает правильную конечную точку серверной части https://api.teamtailor.com/v1/jobs , но возвращает 404, например, если вы переходите по этому URL-адресу https://api.teamtailor.com /в1.

См. трассировку запроса ниже.

Входящий (0,345 мс)

api-inspector (0.289 ms)
{
    "request": {
        "scheme": {
            "received": "https",
            "original": "https"
        },
        "method": "GET",
        "url": "https://x-api-dev.azure-api.net/teamtailor/jobs",
        "headers": [
            {
                "name": "X-Forwarded-For",
                "value": "176.22.116.20,20.121.82.216"
            },
            {
                "name": "X-Forwarded-Host",
                "value": "api.dev.x.com"
            },
            {
                "name": "X-Forwarded-Proto",
                "value": "https"
            },
            {
                "name": "X-Azure-FDID",
                "value": "5c75cd49-4ac3-41f2-820c-c58d82b39b5d"
            },
            {
                "name": "sec-ch-ua",
                "value": "\"Google Chrome\";v=\"123\",\"Not:A-Brand\";v=\"8\",\"Chromium\";v=\"123\""
            },
            {
                "name": "sec-ch-ua-mobile",
                "value": "?0"
            },
            {
                "name": "ocp-apim-subscription-key",
                "value": "xxxx"
            },
            {
                "name": "sec-ch-ua-platform",
                "value": "\"macOS\""
            },
            {
                "name": "Sec-Fetch-Site",
                "value": "cross-site"
            },
            {
                "name": "Sec-Fetch-Mode",
                "value": "cors"
            },
            {
                "name": "Sec-Fetch-Dest",
                "value": "empty"
            },
            {
                "name": "x-azure-ref",
                "value": "20240417T093556Z-167bd55cf6bjkc2bvfpvan0mbc0000000200000000009bgp"
            },
            {
                "name": "x-azure-clientip",
                "value": "176.22.116.20"
            },
            {
                "name": "x-azure-socketip",
                "value": "20.121.82.216"
            },
            {
                "name": "x-azure-requestchainv2",
                "value": "hops=1"
            },
            {
                "name": "Cache-Control",
                "value": "no-cache, no-store"
            },
            {
                "name": "Via",
                "value": "HTTP/1.1 Azure"
            },
            {
                "name": "Accept",
                "value": "*/*"
            },
            {
                "name": "Accept-Encoding",
                "value": "gzip,deflate,br,zstd"
            },
            {
                "name": "Accept-Language",
                "value": "da-DK,da;q=0.9,en-US;q=0.8,en;q=0.7"
            },
            {
                "name": "Host",
                "value": "x-api-dev.azure-api.net"
            },
            {
                "name": "Referer",
                "value": "https://apimanagement.hosting.portal.azure.net/"
            }
        ]
    }
}
api-inspector (0.003 ms)
{
    "configuration": {
        "api": {
            "from": "/teamtailor",
            "to": {
                "scheme": "https",
                "host": "api.teamtailor.com",
                "port": 443,
                "path": "/v1",
                "queryString": "",
                "query": {},
                "isDefaultPort": true
            },
            "version": null,
            "revision": "1"
        },
        "operation": {
            "method": "GET",
            "uriTemplate": "/*"
        },
        "user": "-",
        "product": "-"
    }
}
cors (0.028 ms)
"Origin header was missing or empty and the request was classified as not cross-domain. CORS policy was not applied."
check-header (0.008 ms)
{
    "message": "Header validated.",
    "header": {
        "name": "X-Azure-FDID",
        "value": "5c75cd49-4ac3-41f2-820c-c58d82b39b5d"
    }
}
set-header (0.012 ms)
{
    "message": "Specified value was assigned to the header (see below).",
    "header": {
        "name": "Authorization",
        "value": "Token token=xxxx"
    }
}
set-header (0.004 ms)
{
    "message": "Specified value was assigned to the header (see below).",
    "header": {
        "name": "X-Api-Version",
        "value": "20240404"
    }
}

Бэкэнд (57,634 мс)

forward-request (15.038 ms)
{
    "message": "Request is being forwarded to the backend service. Timeout set to 300 seconds",
    "request": {
        "method": "GET",
        "url": "https://api.teamtailor.com/v1/jobs",
        "headers": [
            {
                "name": "Host",
                "value": "api.teamtailor.com"
            },
            {
                "name": "X-Forwarded-For",
                "value": "176.22.116.20,20.121.82.216,147.243.243.107"
            },
            {
                "name": "X-Forwarded-Host",
                "value": "api.dev.x.com"
            },
            {
                "name": "X-Forwarded-Proto",
                "value": "https"
            },
            {
                "name": "X-Azure-FDID",
                "value": "5c75cd49-4ac3-41f2-820c-c58d82b39b5d"
            },
            {
                "name": "sec-ch-ua",
                "value": "\"Google Chrome\";v=\"123\",\"Not:A-Brand\";v=\"8\",\"Chromium\";v=\"123\""
            },
            {
                "name": "Authorization",
                "value": "Token token=xxxx"
            },
            {
                "name": "sec-ch-ua-mobile",
                "value": "?0"
            },
            {
                "name": "ocp-apim-subscription-key",
                "value": "xxxx"
            },
            {
                "name": "sec-ch-ua-platform",
                "value": "\"macOS\""
            },
            {
                "name": "Sec-Fetch-Site",
                "value": "cross-site"
            },
            {
                "name": "Sec-Fetch-Mode",
                "value": "cors"
            },
            {
                "name": "Sec-Fetch-Dest",
                "value": "empty"
            },
            {
                "name": "x-azure-ref",
                "value": "20240417T093556Z-167bd55cf6bjkc2bvfpvan0mbc0000000200000000009bgp"
            },
            {
                "name": "x-azure-clientip",
                "value": "176.22.116.20"
            },
            {
                "name": "x-azure-socketip",
                "value": "20.121.82.216"
            },
            {
                "name": "x-azure-requestchainv2",
                "value": "hops=1"
            },
            {
                "name": "Cache-Control",
                "value": "no-cache, no-store"
            },
            {
                "name": "Via",
                "value": "HTTP/1.1 Azure"
            },
            {
                "name": "Accept",
                "value": "*/*"
            },
            {
                "name": "Accept-Encoding",
                "value": "gzip,deflate,br,zstd"
            },
            {
                "name": "Accept-Language",
                "value": "da-DK,da;q=0.9,en-US;q=0.8,en;q=0.7"
            },
            {
                "name": "Referer",
                "value": "https://apimanagement.hosting.portal.azure.net/"
            },
            {
                "name": "X-Api-Version",
                "value": "20240404"
            },
            {
                "name": "Request-Id",
                "value": "|49c3977d-44c336475720c80d.49c3977e_"
            },
            {
                "name": "Request-Context",
                "value": "appId=cid-v1:cc1a7714-6a74-4858-9b04-8c097ae7f1f8"
            }
        ]
    }
}

forward-request (42.596 ms)
{
    "response": {
        "status": {
            "code": 404,
            "reason": "Not Found"
        },
        "headers": [
            {
                "name": "Transfer-Encoding",
                "value": "chunked"
            },
            {
                "name": "Connection",
                "value": "keep-alive"
            },
            {
                "name": "X-Frame-Options",
                "value": "SAMEORIGIN"
            },
            {
                "name": "X-XSS-Protection",
                "value": "1; mode=block"
            },
            {
                "name": "X-Content-Type-Options",
                "value": "nosniff"
            },
            {
                "name": "X-Download-Options",
                "value": "noopen"
            },
            {
                "name": "X-Permitted-Cross-Domain-Policies",
                "value": "none"
            },
            {
                "name": "Referrer-Policy",
                "value": "strict-origin-when-cross-origin"
            },
            {
                "name": "Vary",
                "value": "Accept,Origin"
            },
            {
                "name": "X-Request-Id",
                "value": "536037a4-b2da-49cc-a070-08f77ddbfd3e"
            },
            {
                "name": "X-Runtime",
                "value": "0.017596"
            },
            {
                "name": "X-Rack-Cache",
                "value": "reload"
            },
            {
                "name": "Strict-Transport-Security",
                "value": "max-age=63072000; includeSubDomains"
            },
            {
                "name": "Cache-Control",
                "value": "private"
            },
            {
                "name": "Content-Type",
                "value": "text/html; charset=utf-8"
            },
            {
                "name": "Date",
                "value": "Wed, 17 Apr 2024 09:35:56 GMT"
            },
            {
                "name": "Server",
                "value": "nginx/1.25.4"
            }
        ]
    }
}

Исходящий (0,994 мс)

transfer-response (0.994 ms)
{
    "message": "Response has been sent to the caller in full"
}

Если предоставленный резервный URL-адрес недоступен, вы также получите 404 в APIM. Например, когда вы просто переходите по адресу api.teamtailor.com/v1, вы получаете результат 404, вы также получите тот же результат в APIM.

Ikhtesam Afrin 17.04.2024 16:06
api.teamtailor.com/v1/jobs — это действительный и доступный URL-адрес, но он все равно возвращает 404.
Loc Dai Le 17.04.2024 18:11

Я получаю ошибку 406 при вызове api.teamtailor.com/v1/jobs. URL-адрес должен быть доступен извне для использования в APIM.

Ikhtesam Afrin 18.04.2024 07:23

@LocDaiLe Я воссоздал вашу настройку, и у меня все работает нормально. При правильной версии X-Api я получаю 401 Unauthorized в управлении API (как и ожидалось — так же, как и при прямых запросах к api.teamtailor.com/v1/jobs.

10p 18.04.2024 13:21

@10p Да, я попробовал то же самое со своим собственным экземпляром APIM, и это работает. Тот, над которым я работаю и который не работает, управляется с помощью инфраструктуры как кода. Я не могу понять, почему это не работает. В этом случае это не работает, у нас есть собственный домен.

Loc Dai Le 18.04.2024 14:13
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
5
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нашел ошибку. Это был заголовок X-Forwarded-Host, который был установлен для моего домена, а не для TeamTailors API. Я удаляю этот заголовок во входящем сообщении, теперь он работает

Другие вопросы по теме

Похожие вопросы

Несколько учетных записей хранения и контейнеры Terraform
Попытка пройти аутентификацию с помощью SharePoint и получить список файлов через API с использованием токена доступа
Конечная точка пакета доступа, похоже, не работает
Есть ли способ установить версию pytorch, которой нет в библиотеке pip, в развертывании Azure?
Потоковая передача IAsyncEnumerable JSON не выполняется в веб-приложении Azure, работающем в IIS
Как добавить свойство, полученное из триггерной функции, во все журналы в устойчивой функции Azure?
Разработайте поток Logic Apps в Azure, который отслеживает версии файлов SharePoint. При обнаружении существенного изменения версии сохраните файл в хранилище BLOB-объектов Azure
Публикация и мониторинг показателей сборки из конвейера Azure в Azure DevOps
Приложение Azure Logic — изменение пароля Outlook
Оператор GraphQL `in` не работает при использовании статического веб-приложения Azure