Asp.net mvc 如何在浏览器的外部文件夹中显示PDF文档

Asp.net mvc 如何在浏览器的外部文件夹中显示PDF文档,asp.net-mvc,asp.net-mvc-3,pdf,razor,Asp.net Mvc,Asp.net Mvc 3,Pdf,Razor,目前我工作的文档管理系统项目技术是ASP.NETMVC3。我想显示位于硬盘(C:,D:E:ect)文件夹中的pdf文档。我试图标记。但它不起作用。它适用于我的项目中的文件。此外,我不需要下载pdf并阅读。我需要把它展示在我眼中的某个地方 我看到了这个代码段。但是我不知道怎么用这个 public FileResult GetFile(string fileName) { Response.AppendHeader("Content-Disposition", "inline; filena

目前我工作的文档管理系统项目技术是ASP.NETMVC3。我想显示位于硬盘(C:,D:E:ect)文件夹中的pdf文档。我试图
标记。但它不起作用。它适用于我的项目中的文件。此外,我不需要下载pdf并阅读。我需要把它展示在我眼中的某个地方

我看到了这个代码段。但是我不知道怎么用这个

public FileResult GetFile(string fileName)
{
    Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName + ";");
    string path = AppDomain.CurrentDomain.BaseDirectory + "App_Data/";            
    return File(path + fileName, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
}
有人能帮我解决这个问题吗。 谢谢

您可以使用Controller类的方法。这将使PDF返回浏览器

public ActionResult GetFile(string fileName)
{
  string fullPathToFile=SomeMethodToGetFullPathFromFileName(fileName);
  return File(fullPathToFile,"application/pdf","someFriendlyName.pdf")
}
假设
somethodToGetFullPathFromFileName
是一个返回PDF文件完整路径的方法

您可以使用
Server.MapPath
方法获取文件的完整(物理)路径

如果要在浏览器中查看此内容,可以像

yoursitename/someControllername/getfile?fileName=somepdffilenamehere

您显示的代码表示一个控制器操作,该操作为
App\u code
文件夹中的文件提供服务。从硬盘上的任意位置提供文件将是一个巨大的安全漏洞。所以我建议你坚持这种方法。但该代码中仍然存在缺陷。恶意用户仍然可以使用精心编制的url在硬盘上显示任意文件。可通过以下操作解决此问题:

public ActionResult GetFile(string file)
{
    var appData = Server.MapPath("~/App_Data");
    var path = Path.Combine(appData, file);
    path = Path.GetFullPath(path);
    if (!path.StartsWith(appData))
    {
        // Ensure that we are serving file only inside the App_Data folder
        // and block requests outside like "../web.config"
        throw new HttpException(403, "Forbidden");
    }

    if (!System.IO.File.Exists(path))
    {
        return HttpNotFound();
    }

    return File(path, MediaTypeNames.Application.Pdf);
}
现在,您可以使用
embed
标记链接到此控制器操作:

<object data="@Url.Action("GetFile", "SomeController", new { file = "test.pdf" })" type="application/pdf" width="300" height="200">
  alt : @Html.ActionLink("test.pdf", "SomeController", "Home", new { file = "test.pdf" })
</object>

文件已下载。我需要在“视图”中的某个位置显示该pdf。
<iframe src="@Url.Action("GetFile", "SomeController", new { file = "foo.pdf" })" style="width:718px; height:700px;" frameborder="0"></iframe>