首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ASP.NET MVC 5控制器中使用POST从下载文件

在ASP.NET MVC 5控制器中使用POST从下载文件
EN

Stack Overflow用户
提问于 2020-06-25 18:51:36
回答 1查看 5.1K关注 0票数 3

我需要从下载一个文件。控制器接受POST请求,如下所示:

代码语言:javascript
复制
    [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");
    }

我不知道如何从ASP.NET MVC 5控制器发送POST请求到这个dotnet核心API控制器

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

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

而且不存在允许WebClient.UploadData JSON的过载POSTing。

任何例子都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-25 21:42:00

将GetPdf方法更改为:

代码语言:javascript
复制
[Consumes("application/json")]
public IActionResult GetPDF([FromBody] ReportRequest request)
{
    //report generation logic
    return File(pdfMemoryStream.ToArray(), "application/pdf");
}

使用HttpClient而不是WebClient

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62582368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档