HttpResponseMessage 在浏览器中返回 Json 对象而不是文件下载 - WEBAPI .net Core

问题描述 投票:0回答:1

以下代码返回 JSON 对象,而不是下载 PDF 文件:

var dataStream = new MemoryStream(System.IO.File.ReadAllBytes(@"C:\data\test12.pdf"));
                dataStream.Position = 0;
                HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.OK);
                responseMsg.Content = new StreamContent(dataStream);
                responseMsg.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("inline");
                responseMsg.Content.Headers.ContentDisposition.FileName = file.Rows[0][1].ToString();
                responseMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
                responseMsg.Content.Headers.ContentLength = dataStream.Length;
                result = responseMsg;

输出:

{“版本”:{“主要”:1,“次要”:1,“构建”:-1,“修订版”:-1,“主要修订版”:-1,“次要修订版”:-1},”内容":{"标题":[{"键":"内容处置","值":["内联;文件名=4159a9f5-0102-46c3-a39f-7449c00e39e5.pdf"]},{"键": "Content-Type","value":["application/pdf"]},{"key":"Content-Length","value":["7874"]}]},"statusCode":200," reasonPhrase":"确定","headers":[],"requestMessage":null,"isSuccessStatusCode":true}

c# .net asp.net-core asp.net-core-webapi
1个回答
1
投票

下面的代码返回 JSON 对象而不是下载 pdf 文件。

这是调用该api时的预期结果。在您当前的代码中,框架将

HttpResponseMessage
视为模型。

调用api后下载文件的正确方式应该是:

public IActionResult Get()
{
    var dataStream = new MemoryStream(System.IO.File.ReadAllBytes(@"C:\data\test12.pdf"));
    Response.Headers.Add("Content-Disposition", "inline; filename=test.pdf");
    return File(dataStream, "application/pdf");
}

如果要使用

HttpResponseMessage
,需要通过ajax调用api。

参考:https://stackoverflow.com/a/41115583/11398810

© www.soinside.com 2019 - 2024. All rights reserved.