我有一个简单的动作,应该允许我下载一个询问的文件。
如果我使用浏览器的上下文菜单调用该操作(请参阅下面的屏幕截图),这非常有效,但是当我直接单击该链接时,我收到以下错误: HTTP错误404.0 - 未找到 - 您的资源是寻找已删除,更改名称或暂时无法使用。
使用浏览器的上下文菜单:
用于下载文件的控制器操作:
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>
}
答案 0 :(得分:1)
您正在传递包含扩展名的文件名,因此它被ASP.NET忽略并视为静态文件,从而产生404.为避免这种情况,请不要传递扩展名。可能最好通过ID来引用文件。
另请注意,如果文件是数据的一部分,则最好将它们存储在数据库中。这避免了许多文件系统陷阱。