Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC中从控制器url打开文件_C#_Asp.net_Asp.net Mvc_Pdf - Fatal编程技术网

C# 在MVC中从控制器url打开文件

C# 在MVC中从控制器url打开文件,c#,asp.net,asp.net-mvc,pdf,C#,Asp.net,Asp.net Mvc,Pdf,我需要当你点击一个网站上的链接打开一个pdf文件。当我把一个链接放到实际的文件上,你点击链接,它就会打开文件本身,这样你就可以查看它了。当您创建一个控制器来读取一个文件id并发送该文件时,它也可以工作。问题是客户希望直接打开文件(如链接到实际文件的方法),而不是自动下载(如控制器方法) 控制器示例(下载文件)href=”https://mywebsite.com/Download/DownloadFile?downloadId=17" 链接示例(直接打开文件)href=”https://mywe

我需要当你点击一个网站上的链接打开一个pdf文件。当我把一个链接放到实际的文件上,你点击链接,它就会打开文件本身,这样你就可以查看它了。当您创建一个控制器来读取一个文件id并发送该文件时,它也可以工作。问题是客户希望直接打开文件(如链接到实际文件的方法),而不是自动下载(如控制器方法)

控制器示例(下载文件)href=”https://mywebsite.com/Download/DownloadFile?downloadId=17" 链接示例(直接打开文件)href=”https://mywebsite.com/pdf/mypdf.pdf"

我在多个浏览器和多台计算机上进行了尝试。结果总是一样的。我将文件内容类型设置为application/pdf


任何帮助都将不胜感激。

如果您的控制器方法生成文档作为响应,您可以使用向浏览器指定如何打开它。我认为您希望包含以下标题:

Content-Disposition: inline; filenname=mypdf.pdf
Content-Type: application/pdf

这在大多数浏览器中都适用

您可以为静态文件设置路由

步骤:

  • 在RouteConfig.cs中启用静态文件的路由

    routes.RouteExistingFiles = true;
    
  • 将路径添加到RouteConfig.cs

    routes.MapRoute(
      name: "staticFileRoute",
      url: "pdf/{*file}",
      defaults: new { controller = "Download", action = "DownloadFile" }
    );
    
  • 在Web.config中添加以下条目

    <system.webServer>
      <handlers>
        <add name="MyCustomUrlHandler2" path="pdf/*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
    </system.webServer>
    
  • public FileResult DownloadFile(string file)
    {
       string path = Server.MapPath(String.Format("~/pdf/{0}", file));
    
       if (System.IO.File.Exists(path))
       {
          string mime = MimeMapping.GetMimeMapping(path);
          return File(path, mime);
       }
       else
            throw new ArgumentException("File not found");
    }