C# 如何在Asp.net核心MVC浏览器上下载PDF文件

C# 如何在Asp.net核心MVC浏览器上下载PDF文件,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我使用以下代码下载pdf格式的SSRS报告: string URL = "http://ssrs-test.com/ReportS/?/UAT_FOLDER"; URL = URL + "&SRNo=122&rs:Command=Render&rs:Format=pdf"; System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(URL);

我使用以下代码下载pdf格式的SSRS报告:

 string URL = "http://ssrs-test.com/ReportS/?/UAT_FOLDER";
 URL = URL + "&SRNo=122&rs:Command=Render&rs:Format=pdf";

 System.Net.HttpWebRequest Req = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(URL);

 Req.Method = "GET";
 string path = @ "E:\New folder\Test.pdf";
 System.Net.WebResponse objResponse = Req.GetResponse();
 System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create);
 System.IO.Stream stream = objResponse.GetResponseStream();
 byte[] buf = new byte[1024];
 int len = stream.Read(buf, 0, 1024);

 while (len > 0) {
  fs.Write(buf, 0, len);
  len = stream.Read(buf, 0, 1024);
 }
 stream.Close();
 fs.Close();
它完美地在指定路径E:\New folder\中创建了一个pdf文件,我尝试做的是:

我需要在浏览器上下载它,就像我们在asp.net中使用Response.Write和Response.End等所做的那样

我可以在ASP.Net内核中执行同样的操作吗

我所说:


我将pdf复制到解决方案中,并将“复制到输出目录”属性更改为“复制”

index.cshtml,可在浏览器选项卡中打开pdf:

@{
    ViewData["Title"] = "Home Page";
}

<a href="/home/get">Open PDF</a>

首先,您需要确保已将文件上载到项目中

下面是一个关于如何在Asp.Net Core浏览器上下载pdf的简单演示:

1.意见:

<a asp-action="GetPdf" asp-controller="Users">Download</a>
3.Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   //...
   app.UseStaticFiles();
   //...
}
4.结果:
您可以下载一个三向文件

public async Task<IActionResult> Get()
{
    var path = Path.Combine(
    Directory.GetCurrentDirectory(), "wwwroot\\images\\4.pdf");

    var memory = new MemoryStream();
    using (var stream = new FileStream(path, FileMode.Open))
    {
       await stream.CopyToAsync(memory);
    }
    memory.Position = 0;
    return File(memory, "application/pdf", "Demo.pdf");
}
HTML


如果要在浏览器中显示PDF,而不是提示将其保存到磁盘上,则服务器端代码需要指定一个内容配置:内联标题。例如,.@AlwaysLearning尝试过这个:但在Chrome上什么都没有发生。你在使用什么样的asp.net核心项目?剃须刀页面?mvc?@Harry Its mvc..我使用的是AspNet Core,让我试试这是AspNet Core我不知道为什么但不工作我会像Ajax那样调用get方法,这会有所不同吗?使用Ajax,响应会在javascript的http响应中返回。您需要使用javascript来解析响应并手动进行下载。像这样的东西实际上可能链接不好。我只是很快就找到了。也许看看这一点,在项目中不存储pdf文件是否可行?只有确保文件存在于服务器上,您才能找到文件路径并下载。是否可以使用Stream完成?这意味着不需要存储文件,尽管它是通过流完成的,但它也需要存在于服务器上。
@{
    ViewData["Title"] = "Home Page";
}

<a href="/home/get" download>Download PDF</a>
public class HomeController : Controller
{
    public IActionResult Get()
    {
        var stream = new FileStream(@"example.pdf", FileMode.Open);
        return new FileStreamResult(stream, "application/pdf");
    }
}
<a asp-action="GetPdf" asp-controller="Users">Download</a>
 [HttpGet]
 public ActionResult GetPdf()
 {
     string filePath = "~/file/test.pdf";
     Response.Headers.Add("Content-Disposition", "inline; filename=test.pdf");
     return File(filePath, "application/pdf");           
 }
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   //...
   app.UseStaticFiles();
   //...
}
public async Task<IActionResult> Get()
{
    var path = Path.Combine(
    Directory.GetCurrentDirectory(), "wwwroot\\images\\4.pdf");

    var memory = new MemoryStream();
    using (var stream = new FileStream(path, FileMode.Open))
    {
       await stream.CopyToAsync(memory);
    }
    memory.Position = 0;
    return File(memory, "application/pdf", "Demo.pdf");
}
<form asp-controller="pdf" asp-action="Get" method="get">
  <button type="submit">Download</button>
</form>