c# - 在 ASP.NET MVC 5 Controller 中使用 POST 从 dotnet Core Web API 下载文件

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

我需要从 dotnet Core Web API 下载文件。 Controller 接受 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 Controller 发送到此 dotnet 核心 API Controller

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

这与 API Controller 上的 [Consumes("application/octet-stream")] 无关。

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

任何例子将不胜感激。

最佳答案

将 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();

关于c# - 在 ASP.NET MVC 5 Controller 中使用 POST 从 dotnet Core Web API 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62582368/

相关文章:

c# - 无法从动态创建控件中读取值

c# - 在 ASP.NET MVC 4 应用程序中打印版本号

c# - 如何获取当前用户的SelectList

c# - 如何使用标签助手创建带有模型绑定(bind)的自定义编辑器

c# - 如何在 C# 中创建非持久性(内存中)http cookie?

c# - 在 Scala 中实现 ExpandoObject

使用 RadStyleSheetManager 进行 CSS 缓存

c# - 仅使用交换服务器发送电子邮件

javascript - 从asp :LinkButton's CommandArgument attribute using jquery/javascript获取值

asp.net-mvc - 遍历集合并在 Razor 中打印索引和项目