【问题标题】:Download file from dotnet Core Web API using POST in ASP.NET MVC 5 controller在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件
【发布时间】: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 重载。

任何例子都将不胜感激。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core asp.net-core-webapi


    【解决方案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 操作才能使用您的代码。
    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多