Как правильно получить запрошенный zip-файл из HTTP? - PullRequest
0 голосов
/ 12 февраля 2020

Извините, если я настаиваю на дополнительных вопросах о том, как объяснить мою проблему, мне это не знакомо, но я сделаю все возможное, чтобы объяснить это.

Я делаю HTTP-запрос к PowerBI REST API для экспорта отчета , как сказано в документации.

Поскольку это будет процесс планирования, я использую функции Azure для достижения этой цели. Для этого на C# я использую одобренную Microsoft открытую библиотеку под названием Microsoft.PowerBI.Api и использую функцию экспорта для получения желаемого отчета.

Вот так я экспортирую его на Azure Функции, конечно ненужные чанки и учетные данные опущены:

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
   string text= "";

   using(var client = new PowerBIClient(new Uri(apiUrl), tokenCredentials)){

      var report = await exportReport(client, REPORT_ID1);
      log.Info($"Type: {report.GetType()}");
      StreamReader reader = new StreamReader( report );
      text = reader.ReadToEnd();

    }


  return text == null
    ? req.CreateResponse(HttpStatusCode.BadRequest, "Error.")
    : req.CreateResponse(HttpStatusCode.OK, 
        text
        );
}

public static async Task<Stream> exportReport(PowerBIClient PBIClient, String reportId){
    var myTask = Task.Run(() => 
        PBIClient.Reports.ExportReport(reportId)
    );
    var x = await myTask;
    return x;
}

Согласно подсказке Visual Studio, PBIClient.Reports.ExportReport(reportId) Функции возвращают объект Stream . Вот где я борюсь.

Я сделал этот HTTP-запрос с использованием Microsoft Flow (без кода), и я знаю, что дает ответ, и это что-то похожее на следующее изображение, я не добавляю весь ответ из-за он огромен, и это только тело.

Ответ при использовании Microsoft Flow

Ответ при использовании кода выше в Azure Функции

Как вы видите на первом изображении, я получаю zip-файл ("Content-Type":"application/zip"), но на втором изображении я получаю JSON (Content-Type":"application/json; charset=utf-8")

Я не уверен, может ли причина этого в том, что я неправильно делаю код. Я искал несколько способов лечения Стрима, но он мне не подходит. Я хотел бы знать, как получить ответ, подобный первому, но на C# вместо Microsoft Flow.

Большое спасибо, я надеюсь, что я хорошо себя объяснил.

...