Asp.net mvc 4 在web应用程序的服务器上提供静态文件下载

Asp.net mvc 4 在web应用程序的服务器上提供静态文件下载,asp.net-mvc-4,razor,download,Asp.net Mvc 4,Razor,Download,我正在开发一个MVC4Web应用程序。在一个页面上,我提供了一个锚链接,它引用了应用程序目录中的一个文件。相同的代码是- @Html.Action("Download_Static_File", "Charge_Entry", new { File_Path = "../../Content/Templates/Pt_Data/Pt_Data.xls", File_Name = "Pt_Data_Template", value = "Download template" }); 我的动机是,

我正在开发一个MVC4Web应用程序。在一个页面上,我提供了一个锚链接,它引用了应用程序目录中的一个文件。相同的代码是-

@Html.Action("Download_Static_File", "Charge_Entry", new { File_Path = "../../Content/Templates/Pt_Data/Pt_Data.xls", File_Name = "Pt_Data_Template", value = "Download template" });
我的动机是,文件应该在点击后下载

但是,当我单击链接时,会出现如下错误

找不到路径“C:\Program Files\Common Files\Microsoft Shared\Content\Templates\Pt\U Data\Pt\U Data.xls”的一部分

我也试过了

System.Web.HttpContext.Current.Server.MapPath
这导致了以下错误:

使用自定义TextWriter时,OutputStream不可用

正在调用的操作方法是:

    public FileResult Download_Static_File(string File_Path,string File_Name)
    {
        byte[] fileBytes = System.IO.File.ReadAllBytes(File_Path);
        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, File_Name);
    }
这是正确的方法吗?任何帮助都将不胜感激


我还提到了这个

您的锚似乎指向一个名为
下载静态文件
(很遗憾您没有显示)的控制器操作,并传递一个名为
文件路径
的参数

您在视图中使用的
@Html.Action
帮助程序正在尝试将指定的操作作为子操作执行。您可能会发现以下描述子操作的博客文章很有用:

我猜您试图实现的是在视图中生成一个锚,指向用户可以下载的静态文件。在这种情况下,您更希望将锚定标记与
Url.Action
helper结合使用:

<a href="@Url.Content("~/Content/Templates/Pt_Data/Pt_Data.xls")">
    Download_Static_File
</a>
然后在你看来,你会有一个锚到这个控制器的行动:

@Html.ActionLink(
    linkText: "Download template", 
    actionName: "DownloadStaticFile", 
    controllerName: "Charge_Entry", 
    routeValues: new { filename = "Pt_Data.xls" },
    htmlAttributes: null
)

您的锚点似乎指向名为
下载静态\u文件
(遗憾的是您没有显示)的控制器操作,并传递名为
文件路径
的参数

您在视图中使用的
@Html.Action
帮助程序正在尝试将指定的操作作为子操作执行。您可能会发现以下描述子操作的博客文章很有用:

我猜您试图实现的是在视图中生成一个锚,指向用户可以下载的静态文件。在这种情况下,您更希望将锚定标记与
Url.Action
helper结合使用:

<a href="@Url.Content("~/Content/Templates/Pt_Data/Pt_Data.xls")">
    Download_Static_File
</a>
然后在你看来,你会有一个锚到这个控制器的行动:

@Html.ActionLink(
    linkText: "Download template", 
    actionName: "DownloadStaticFile", 
    controllerName: "Charge_Entry", 
    routeValues: new { filename = "Pt_Data.xls" },
    htmlAttributes: null
)