这是我的 Azure 函数 API:
[FunctionName(nameof(GetPackage))]
[OpenApiOperation(operationId: "get-package", tags: new[] { "asap" }, Summary = "Get Package")]
[OpenApiRequestBody(contentType: "application/json", bodyType: typeof(UpdateSDRequestInputModel), Required = true, Description = "Get Package")]
public async Task<IActionResult> GetPackage(
[HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route = "v1/getPackage/{alias}/{jobId}")] HttpRequest req,
[FromUri] string alias, [FromUri] string jobId, Microsoft.Azure.WebJobs.ExecutionContext executionContext)
{
return await ExecuteAndFormResponseAsync(req, executionContext.FunctionName, async () =>
{
return new OkObjectResult(await _qPPService.GetPackage(alias, jobId,req));
});
}
这是我的
GetPackage
方法:
public async Task<FileStreamResult> GetPackage(string alias, string jobId)
{
try
{
string _authToken = await GetAuthToken();`your text`
_httpClient.DefaultRequestHeaders.Clear();
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _authToken);
var addtnlRequest = await _additionalRequestRepository.GetAdditionalRequestAsync($"Additional-{jobId}", alias)
?? throw new NotFoundException($"Request with Id: Additional-{jobId} for alias: {alias} does not exists");
var request = await _requestRepository.GetRequestAsync($"Primary-{jobId}", alias) ??
throw new NotFoundException($"Request with Id: Additional-{jobId} for alias: {alias} does not exists");
var requestMessage = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri(_qPPEndPoint + "jobs/" + addtnlRequest.QPPRequestId + "/downloads/files?path=" + "3c35af-FullPackage-2308171550.zip")
};
var responseMessage = await _httpClient.SendAsync(requestMessage);
responseMessage.EnsureSuccessStatusCode();
Stream stream = responseMessage.Content.ReadAsStream();
responseMessage.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
return new FileStreamResult(stream, "application/zip")
{
FileDownloadName = "3c35af-FullPackage-2308171550.zip"
};
}
catch (Exception ex)
{
ExceptionHelper.LogAndThrowException($"Failed getting package for {jobId} {Environment.NewLine} {ex}", _logAndTelemetryHelper);
throw;
}
}
您必须删除包装在 OkObjectResult 方法中的 FileStreamResult。
所以你的主要方法应该是这样的:
public async Task<IActionResult> GetPackage(
[HttpTrigger(AuthorizationLevel.Anonymous, "GET", Route = "v1/getPackage/{alias}/{jobId}")] HttpRequest req,
[FromUri] string alias, [FromUri] string jobId, Microsoft.Azure.WebJobs.ExecutionContext executionContext)
{
return await ExecuteAndFormResponseAsync(req, executionContext.FunctionName, async () =>
{
return await _qPPService.GetPackage(alias, jobId,req);
});
}