在ASP.net MVC中从服务器下载文件(找不到错误404)

时间:2015-12-13 15:14:24

标签: c# asp.net-mvc

我有一个简单的动作,应该允许我下载一个询问的文件。

如果我使用浏览器的上下文菜单调用该操作(请参阅下面的屏幕截图),这非常有效,但是当我直接单击该链接时,我收到以下错误: HTTP错误404.0 - 未找到 - 您的资源是寻找已删除,更改名称或暂时无法使用。

使用浏览器的上下文菜单:

enter image description here

用于下载文件的控制器操作:

public ActionResult Download(string id)
{
    string username = User.Identity.Name;
    Client client = db.Client.SingleOrDefault(x => x.Email == username);

    string filePath = Server.MapPath("~/Client-Documents/" + client.FolderName + "/" + id);

    return File(filePath, "text/plain", id);
}

查看生成文件链接的片段:

@for (int i = 0; i < Model.Count(); i++)
{
    <tr>
        <td>@(i + 1)</td>
        <td>@Model[i].Name</td>
        <td>
            <a href="@Url.Action("Download", "Client", new { @area = "Administration", id = Model[i].Location })">Download</a>
        </td>
    </tr>
}

1 个答案:

答案 0 :(得分:1)

您正在传递包含扩展名的文件名,因此它被ASP.NET忽略并视为静态文件,从而产生404.为避免这种情况,请不要传递扩展名。可能最好通过ID来引用文件。

另请注意,如果文件是数据的一部分,则最好将它们存储在数据库中。这避免了许多文件系统陷阱。