Извините, если я настаиваю на дополнительных вопросах о том, как объяснить мою проблему, мне это не знакомо, но я сделаю все возможное, чтобы объяснить это.
Я делаю 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.
Большое спасибо, я надеюсь, что я хорошо себя объяснил.