在 MVC 4 Razor 应用程序中创建下载 link 到内部驱动器上的物理文件

Creating a Download link to a physical file on internal drive, within an MVC 4 Razor Application

我正尝试在 MVC4 应用程序中执行此操作:

@foreach (var item in Model)
{
    <tr>
        <td><a href="@item.DownloadUrl">Download Document</a></td>
    </tr>
}

视图呈现良好,但是当我单击 link 时,没有下载任何内容。

当我将鼠标悬停在 @item.DownloadUrl 上时,我可以看到它的值为:C:\Websites\Documents5.pdf,这是正确的。

当我将鼠标悬停在 link 本身上时,我看到这个 URL 而不是上面的 file:///C:/Websites/Documents/105.pdf,这表明 'file:///' 已添加到开始。

我想知道我怎样才能正确地做到这一点。我知道在我可以让应用程序 link 访问本地驱动器文件之前可能有一些 IIS 配置,但是到目前为止这显然不相关或者是吗?我在 运行 处于调试模式 Visual Studio 中..

注意。 @item.DownloadUrl 是在运行时根据一些代码生成的,例如:

while (Reader.Read())
{
    la.DownloadUrl = Path.Combine(DocumentsLocation, Reader["Id"] + ".pdf");
}

谢谢。

您确实需要使用 Server.MapPath 到 link 到服务器上的远程文件。您现在正在做的是 linking 到客户端计算机上的物理文件。

HttpContext.Current.Server.MapPath(Path.Combine(DocumentsLocation, Reader["Id"] + ".pdf"));

这就是我最终解决问题的方式:

byte[] fileBytes = System.IO.File.ReadAllBytes(System.IO.Path.Combine(DocumentsLocation, name + ".pdf"));
string fileName = name + ".pdf";
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);

感谢所有贡献者。