无法从 ASP.NET Core Web API 获取 500 内部服务器返回 zip 文件夹。但代码运行顺利

问题描述 投票:0回答:1

这是我的 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;
    }
}
c# asp.net-core-webapi http-status-code-500
1个回答
0
投票

您必须删除包装在 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);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.