我正在IIS中开发一个Asp.net MVC Core 2.2网站。 托管我的MVC Core项目的IIS网站已正确创建。我的项目正确生成了PDF文件。通常,我只是使用jquery函数在浏览器中打开该PDF文件:
$.ajax({
url: '@Url.Action("CreatePDF", "MyApiController", new { area= "MyArea" })',
dataType: 'json',
contentType: "application/json",
type: 'POST',
cache: false,
data: JSON.stringify(Filtro),
success: function (d) {
if (d.success == true) {
var item = d.data;
var pageurl = '@Url.Content("~/")' + 'Temporal/' + item.PDFName;
window.open(pageurl, '_blank');
}
},
但是,我刚刚意识到,该MVC Core网站不允许在浏览器中打开任何PDF或txt或jpg或任何文件,而是输出以下消息:
localhost page can’t be found
http error 404
我的问题是:
在MVC Core网站中,我应该如何从Controller从浏览器中打开PDF文件
[Route("[action]")]
[HttpPost]
public ActionResult<BE_Reporte> CreatePDF(BE_Reporte c)
{
BL_Reporte b = new BL_Reporte();
try
{
c = b.CreatePDF(c);
return Ok(new
{
data = c,
success = true,
Message = "PDF created OK"
});
}
catch (Exception ex) { throw ex; }
finally
{
b.Dispose(); b = null;
}
}
答案 0 :(得分:0)
嘿404错误提示服务器未找到您请求的资源。首先尝试在控制器操作CreatePDF的开头放置一个断点。然后将属性路由更改为[HttpPost(“ [action]”)],并删除前面的[Route(“ [action]”)]调用,因为这可能会导致路由错误。
另外,请尝试在参数前添加[FromBody]。
...([FromBody] BE_Reporte ...)
您还可以使用<iframe>
HTML标记显示pdf文件或使用<embed>
如此处所述:Load Generated PDF Data into IFRAME on ASP.NET MVC
答案 1 :(得分:0)
为'@Url.Content("~/")' + 'Temporal/' + item.PDFName;
生成的Url将类似于/Temporal/Test.pdf
。对于此请求网址,您需要将Test.pdf
放置在CoreMVC2_2\wwwroot\Temporal\Test.pdf
处。
如果将Temporal
放在wwwroot以外的其他文件夹中,建议将其移动到wwwroot
,否则,需要配置Serve files outside of web root。
对于客户端,您可能需要尝试以下代码:
var pageurl = '@Url.Content("~/")' + 'Temporal/' + 'Test.pdf';
console.log(pageurl);
var newWindow = window.open("", '_blank');
newWindow.location = pageurl;