ActionLink抛出HTTP 404.0 - 未找到错误// ASP.NET MVC

时间:2015-04-12 19:45:20

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

我遇到了将点击的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 }
        );
    }
}

1 个答案:

答案 0 :(得分:1)

问题是您使用.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('.')之外,还有其他方法可以使用扩展名和文件名。