【问题标题】:ActionLink throws HTTP 404.0 – Not Found error // ASP.NET MVCActionLink 抛出 HTTP 404.0 – Not Found 错误 // ASP.NET MVC
【发布时间】:2015-06-18 02:04:59
【问题描述】:

我在将单击的 ActionLink 的名称传递给控制器​​并使用它时遇到问题。单击时出现404错误。 这是我的视图的一部分,称为 Scan.cshtml

<tbody >
                @foreach (string item in ViewBag.files)
                {
                    <tr>
                        <td class=" row col-md-12 "> @Html.ActionLink(item, "Download", "Scan", new { id = item }, new { style = "color: #424242" })</td>
                    </tr>
                }
            </tbody>

这是我尝试使用已发送数据操作的 ScanController 的部分。我认为它根本没有进入控制器逻辑并且会更快地抛出错误。

    public ActionResult Download(string id)
    {
        // controller logic for downloading file
        var ftpko = new MyProject.Helpers.ftp(@path, name, passwd);
        ftpko.download(id, "~/Dotazniky/dotaznik.jpg"); 

        return View();
    }

假设 item = "car.jpg",错误表示请求的路径 - http://localhost:53593/Scan/Download/car.jpg 未找到。

这是 RouteConfig 文件:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

【问题讨论】:

    标签: c# asp.net-mvc http-status-code-404 actionlink


    【解决方案1】:

    问题是您的 url 名称以 .jpg 结尾,请求将搜索内容文件,而不是执行操作。

    有很多方法可以禁用此功能,但我认为最简单的解决方案是将nameextension 发送到单独的参数中。

    动作变成:

    public ActionResult Download(string name, string ext)
    { 
         string id = name + "." + ext;
    

    添加一条新路线

    routes.MapRoute(
            name: "TwoParameters",
            url: "{controller}/{action}/{name}/{ext}",
            defaults: new { controller = "Home", action = "Index"}
        );
    

    修改ActionLink

    @{ var params = item.Split('.'); }
    @Html.ActionLink(item, "Download", "Scan", new { name = params[0], ext = params[1] }, new { style = "color: #424242" })
    

    注意事项:还有其他方式(.Split('.') 除外)获取扩展名和文件名。

    【讨论】:

    • 感谢您的超快回答。你说的对。这确实是问题所在。我希望这能帮助其他人在未来遇到同样的问题。
    猜你喜欢
    • 2016-01-27
    • 2016-08-30
    • 2022-06-16
    • 2018-12-29
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多