MVC 4路由无法正确读取URL

时间:2014-02-19 07:52:25

标签: asp.net-mvc asp.net-mvc-4

您好我的MVC 4应用程序中有如下URL

http://localhost/ABC/Home/DeleteApp/3000

我已按如下方式配置RouteConfig.cs

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

它转到正确的DeleteApp控制器,但ID值为Null。当我启用firebug时,它会显示正确的URL。

可能出现什么问题? 它调试并来到这里,但id字段为null;

public void DeleteApp(string id)
    {
        try
        {

             // delete logic
        }
        catch (Exception e)
        {
             //
        }
    }

3 个答案:

答案 0 :(得分:1)

你需要这样做:

            routes.MapRoute(
        name: "ABC",
        url: "ABC/{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );       

答案 1 :(得分:1)

如果您想要使用此格式http://localhost/ABC的网址,则必须通过向{controller} / {action} / {id}表达式添加ABC来修改以下路由。

routes.MapRoute(
        name: "Default",
        url: "ABC/{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

答案 2 :(得分:1)

可能的原因:

- >检查您的“id”变量名称(在RouteConfig和控制器操作中必须是完全相同的名称,它区分大小写)

- >在此之前映射的其他路由与模式匹配

如果您将路由映射为{controller}/{action}/{something}而另一个路由映射为{controller}/{action}/{something_else},则当您调用URL“Home / DeleteApp / 3000”时,它无法判断3000是否为“某事”或“something_else”所以它将进行第一场比赛。

要使其正常工作,您必须使用“路径约束” http://www.codeproject.com/Articles/641783/Customizing-Routes-in-ASP-NET-MVC