0

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

[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路由是默认的,第二个路由是details1,第三个路由是details2。

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

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

Details2 调用的 URL

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

我从这里参考了

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

4

2 回答 2

0

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

于 2013-03-26T14:21:06.933 回答
0

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

您还可以使用此路由调试器来检查您的所有路由是否正常工作

更新:我的意思是创建这样的路线。我刚刚看到您缺少“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
于 2013-03-26T14:25:33.140 回答