我尝试在.NET Framework 4.7.1中创建一个带有一个GET Endpoint的简单WebAPI控制器,该GET Endpoint返回一个文件(在这种情况下为PDF),但是当我调用它时,它将返回一个带有请求信息的JSON。我不知道为什么,你能告诉我我的错误在哪里吗?
我尝试返回不同的HttpContent(例如StreamContent或ByteArrayContent),尝试复制来自https://www.aspsnippets.com/Articles/Return-Download-File-using-Web-API-in-ASPNet-MVC.aspx或{{3}}的响应,但是它似乎总是以相同的请求信息结尾。
[HttpGet]
[Route("GetReport")]
public HttpResponseMessage GetReport()
{
FileStream stream = System.IO.File.Open(PDF_TEMP_PATH, FileMode.Open);
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(stream)
};
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "test.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return result;
}
结果是:
{“版本”:{“主要”:1,“次要”:1,“构建”:-1,“修订”:-1,“主要修订”:-1,“次要修订”:-1}, “ content”:{“ headers”:[{“ key”:“ Content-Disposition”,“ value”:[“ attachment; filename = test.pdf”]},{“ key”:“ Content-Type”,“ value“:[” application / pdf“]}]},” statusCode“:200,” reasonPhrase“:” OK“,” headers“:[],” requestMessage“:null,” isSuccessStatusCode“:true}
但是显然,我希望改为使用Stream中的PDF。
答案 0 :(得分:2)
这就是您需要的
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(stream),
};
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = "Test.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return ResponseMessage(result);
答案 1 :(得分:-1)
您可以(应该?)使用ActionResults从您的API返回数据。
[HttpGet]
[Route("GetReport")]
public ActionResult GetReport()
{
return File(System.IO.File.OpenRead(PDF_TEMP_PATH), "application/pdf");
}
您只需要相应地设置ContentType
。
另一种好的做法是使您的方法async变为无效阻塞。