使用自定义路由调用控制器操作始终指向相同的操作

时间:2013-03-26 14:17:22

标签: ajax asp.net-mvc asp.net-mvc-routing

我正在访问采用不同数量参数的不同操作,但即使应用自定义路由,也始终会对同一操作进行调用。 控制器数据-----

[System.Web.Mvc.ActionName("Details1")]
    public string Detail1(string Name)
    {
        return null;
    }

    [System.Web.Mvc.ActionName("Details2")]
    public string Detail2(string Name, string secondName)
    {
        return null;
    }

自定义路线

context.MapRoute(
            "M_default",
            "controllername/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }

        );

        context.MapRoute(
            "name1",
            "controllername/{Name}",
            new { controller = "controllername", action = "Details1" }

        );

        context.MapRoute(
            "name2",
            "controllername/{Name}/{secondName}",
            new { controller = "controllername", action = "Details2" }

        );

forst route是默认路由,第二条路由是details1,第三条路由是details2。

我从视图$ .post调用这些,其URLS为 Details1调用的URL

"/api/controllername/?Name="+somename+"",

Details2调用的URL

"/api/controllername/?Name="+somename+"&secondName="+othername,

我参考了here

什么是可能的解决方案。任何建议,帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试将您的默认路线放在最后。我认为它抓住了一切。

答案 1 :(得分:0)

如果我理解正确,那么问题在于框架如何解析规则。 您必须记住,框架从规则列表的顶部开始,然后向下,直到匹配一个条件。反转网址的顺序应该可以解决您的问题

您还可以使用this route debugger检查所有路线是否正常工作

更新: 我的意思是创建这样的路线。我只是看到你错过了“api”部分。使用路由调试器检查一切是否正确。

    context.MapRoute(
        "name2",
        "api/controllername/{Name}/{secondName}",
        new { controller = "controllername", action = "Details2" }

    );

    context.MapRoute(
        "name1",
        "api/controllername/{Name}",
        new { controller = "controllername", action = "Details1" }

    );

    context.MapRoute(
        "M_default",
        "controllername/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }

    );

应该正确处理

  /api/controllername/somename/someothername

 /api/controllername/somename