Используйте Azure API Management для сквозной передачи, но с возвратом HTML с указанием перенаправления.

Я пытаюсь изменить бэкэнд нашего управления api с ресурса на api веб-приложения. Я взял в качестве справки Использование Azure Api Management в качестве промежуточной передачи.

открытый API: https://service-api-management.azure-api.net/api-name/operation-name

фактический api, который я хочу вызвать: https://service-name.azurewebsites.net/api/Skills/Async/operation-name

кроме URI, тело и заголовок запроса должны оставаться неизменными. Итак, у меня есть политика ниже, настроенная для изменения uri. Но ответ - это html, показывающий перенаправление.

Любопытно, почему он возвращает html, показывающий перенаправление, и как я могу заставить перенаправление работать правильно. Любой вклад будет оценен.

Политика:

<policies>
    <inbound>
        <base />
        <set-backend-service base-url="https://service-name.azurewebsites.net" />
        <rewrite-uri template="@(context.Request.Url.Path.Replace("/operation-name","/api/Skills/Async/operation-name"))" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

Ответ:

<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
<!DOCTYPE html>
<html>
    <head>
        <title>Redirecting</title>
      ......

person RZzz G    schedule 04.06.2020    source источник
comment
Обновление: наконец-то выяснилось, что на уровне API есть политика, которая удаляет токен авторизации в заголовке, поэтому, когда бэкэнд пересылает запрос, токена нет, и поэтому он перенаправляется на страницу входа.   -  person RZzz G    schedule 06.06.2020


Ответы (1)


Протестируйте и посмотрите, что ваша внутренняя служба возвращает такому инструменту, как Postman или Fiddler, лучше всего имитировать обычный HTTP-запрос, который не отправляется браузером. Возможно, серверная часть ожидает некоторый заголовок в запросе, который отправляется неявно, или, может быть, перенаправление выполняется очень быстро и незаметно для пользователя. Чтобы заставить его работать через APIM, вы должны позаботиться о том, чтобы либо не запускать перенаправление, либо снова перенаправлять его на APIM. В некоторой степени здесь может быть полезна политика redirect-content-urls: https://docs.microsoft.com/en-us/azure/api-management/api-management-transformation-policies#MaskURLSContent

person Vitaliy Kurokhtin    schedule 04.06.2020
comment
Спасибо, Виталий, я использовал трассировку на портале APIM и выяснил, что заголовок авторизации происхождения был удален случайно. так что добавьте его обратно, и он просто работает. - person RZzz G; 06.06.2020