在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件

Posted

技术标签:

【中文标题】在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件【英文标题】:Download file from dotnet Core Web API using POST in ASP.NET MVC 5 controller 【发布时间】:2020-10-16 07:48:05 【问题描述】:

我需要从 dotnet Core Web API 下载文件。控制器接受 POST 请求,如下所示:

    [HttpPost]
    [Route("api/pdf")]
    //[Consumes("application/octet-stream")]
    [Produces("application/pdf")]
    public IActionResult GetPDF([FromBody] ReportRequest request)
    
       //report generation logic
       return new FileStreamResult(pdfMemoryStream, "application/pdf");
    

我不确定如何将 POST 请求从 ASP.NET MVC 5 控制器发送到此 dotnet 核心 API 控制器

我试过WebClient.UploadData(action, "POST", requestBytes);,其中requestBytes 是使用BinaryFormatter 获得的模型的字节数组,但API 控制器拒绝它说(406) Not Acceptable.

无论 API 控制器上的 [Consumes("application/octet-stream")] 是什么,都会发生这种情况。

并且没有允许 POST JSON 的 WebClient.UploadData 重载。

任何例子都将不胜感激。

【问题讨论】:

【参考方案1】:

将 GetPdf 方法更改为:

[Consumes("application/json")]
public IActionResult GetPDF([FromBody] ReportRequest request)

    //report generation logic
    return File(pdfMemoryStream.ToArray(), "application/pdf");

并使用HttpClient 而不是WebClient

var client = new HttpClient();
string url = "https://localhost:44398/api/values/GetPdf";
var reportRequest = new ReportRequest()

    Id = 1,
    Type = "Billing"
;
var json = JsonConvert.SerializeObject(reportRequest);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, data);
response.EnsureSuccessStatusCode();
var bytes = await response.Content.ReadAsByteArrayAsync();

【讨论】:

使用这个给了我相同的 406 Not Acceptable 状态代码。 在 GetPdf 方法中尝试return File(pdfMemoryStream.ToArray(), "application/pdf"); 做到了!如果您可以将此评论添加到您的原始答案中,我想将其标记为已接受的答案。 我还必须使用 [Consumes("application/json")] 装饰 GetPdf API 操作才能使用您的代码。

以上是关于在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件

如何在 ASP .NET MVC 5 中使用 select2 将新值动态添加到列表框并将其传递给控制器​​?

Controller.User 在 ASP.NET MVC 5 上由 ASP.NET Identity 设置不一致

ASP.Net MVC 5 - 使用角色授权错误

转007.ASP.NET MVC控制器依赖注入

ASP.NET MVC中使用异步控制器