Можно ли вернуть тело ответа байтового массива из политики управления API-интерфейсом Azure? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть API, который возвращает объект JSON, один из атрибутов которого содержит некоторые двоичные данные в кодировке base64 (файл PDF). Я хочу использовать политику в Azure API Management перед этим API, чтобы ответ возвращал только декодированные двоичные данные.

Я могу декодировать двоичные данные в байтовый массив, но для его возврата мне нужно обновить тело ответа содержимым этого байтового массива (я также соответственно установил заголовок типа контента). Политика set-body - это та, которую я пытался использовать:

<set-body>@{
   var response = context.Response.Body.As<JObject>(true);
   string content = response.Value<string>("content");
   Byte[] bytes = Convert.FromBase64String(content);
   return bytes; // Can't do this!
}</set-body>

Вышеприведенное не работает, поскольку тип возвращаемого значения для set-body должен быть строкой. Я не могу преобразовать двоичные данные в строку, так как они будут повреждены кодировкой ASCII. Я не могу напрямую попытаться присвоить значение context.Response.Body, поскольку оно доступно только для чтения в рамках политики.

Есть ли другой способ заставить управление API Azure вернуть мой байтовый массив в ответе?

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Ответом будет строка, несмотря ни на что, поэтому возвращать строку base64, как наверняка, будет вариант, нет?

Другой вариант - построить строку, содержащую ваши байты в шестнадцатеричном виде.Например, "0xDEADBEEF".

0 голосов
/ 17 мая 2019

На данный момент это невозможно. Вы должны вернуть строку, и она будет помещена в сообщение с использованием кодировки UTF8. Это определенно то, что нам нужно добавить.

...