Https Blazor WASM托管-如何使用HttpPost下载文件

Https Blazor WASM托管-如何使用HttpPost下载文件,https,blazor,blazor-webassembly,Https,Blazor,Blazor Webassembly,我有一个Blazor WASM托管的应用程序,它有一个API端点,在主体中接受一个模型。然后,控制器将模型的属性转换为PDF并返回FileStreamResult 因为我有请求主体内容,所以它必须是HttpPost方法;但是,我只看到使用HttpGet调用下载的示例 现在,我只得到响应内容中的pdf二进制数据。我可以使用此设置触发浏览器下载吗?或者我需要手动将字节[]转换为客户端上的文件吗 服务器控制器: [HttpPost("DownloadPdf")] public as

我有一个Blazor WASM托管的应用程序,它有一个API端点,在主体中接受一个模型。然后,控制器将模型的属性转换为PDF并返回FileStreamResult

因为我有请求主体内容,所以它必须是HttpPost方法;但是,我只看到使用HttpGet调用下载的示例

现在,我只得到响应内容中的pdf二进制数据。我可以使用此设置触发浏览器下载吗?或者我需要手动将
字节[]
转换为客户端上的文件吗

服务器控制器:

[HttpPost("DownloadPdf")]
public async Task<FileStreamResult> DownloadPdf(DownloadPdfModel model)
{
    try
    {
        var title = $"{model.Id}-{model.Description}";
        var filename = $"{title}.pdf";
        var doc = await _pdfService.HtmlToPdf(model.Html);

        return File(doc.Stream, "application/pdf", filename);
    }
    catch (Exception)
    {
        return null;
    }
}

您可以使用此程序包:。 下面是一些示例代码,其中httpResponseMessage是来自包含文件内容的服务器的响应,在我的例子中,它将其作为Excel文件在浏览器中“下载”

            if (httpResponseMessage.IsSuccessStatusCode)
            {
                byte[] bytes = await httpResponseMessage.Content.ReadAsByteArrayAsync();

                await BlazorDownloadFileService.DownloadFile("filename.xlsx",
                    bytes,
                    contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            }

它可以工作,但并不理想。稍后我将尝试重构代码,以在api上呈现html字符串,而不是在客户端
            if (httpResponseMessage.IsSuccessStatusCode)
            {
                byte[] bytes = await httpResponseMessage.Content.ReadAsByteArrayAsync();

                await BlazorDownloadFileService.DownloadFile("filename.xlsx",
                    bytes,
                    contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            }