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



我需要从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")]如何,都会发生这种情况。

并且没有允许发布 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();

最新更新