我需要从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();