【问题标题】:Downloading file from server in ASP.net MVC (Error 404 not found)在 ASP.net MVC 中从服务器下载文件(找不到错误 404)
【发布时间】:2016-03-19 01:57:53
【问题描述】:

我有一个简单的操作,可以让我下载一个请求的文件。

如果我使用浏览器的上下文菜单调用该操作(参见下面的屏幕截图),这将非常有效,但是当我直接单击链接时,我会收到以下错误:HTTP Error 404.0 - Not Found - The resource you are查找已被删除、名称已更改或暂时不可用。

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

下载文件的控制器动作:

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);
}

查看生成文件链接的sn-p:

@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>
}

【问题讨论】:

  • 虽然听起来很奇怪,但您能否发布一些示例查看代码,您是如何生成链接的?
  • @SivaGopal 更新!为什么,在某些情况下,文件的生成方式可能存在问题?
  • @DarinDimitrov 不幸的是,我得到了同样的结果。
  • 什么是实际生成的 URL 示例,您希望它是什么?
  • @mason 感谢您为我指出正确的方向我忘记了我将文件的全名作为 id 传递,这意味着文件也有扩展名,这是一个很大的 NO NO!

标签: c# asp.net-mvc


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 2021-02-04
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 2021-01-31
    • 2017-02-23
    相关资源
    最近更新 更多