2013-03-26 67 views
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" } 

     ); 

的抗冻路由缺省,第二路由是详情1,第三路线为details2。

我调用这些从视图$。员额,其网址是在 网址为从详情1 here

调用

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

网址为Details2调用

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

我采取了参考什么是可能的解决方案。任何建议,帮助将不胜感激。

回答

0

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

+0

我想以这种方式仍是结果是一样的,我已经把路线顺序details2,细节,默认路由后。 – user1260967 2013-03-26 16:54:00

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 
+0

反转路线顺序在我的情况下不起作用...........你是否同意?@ Iridio – user1260967 2013-03-26 16:55:28

+0

更新了答案。对于延迟 – Iridio 2013-03-27 06:11:28

+0

感谢您的回复....必须检查此结构 – user1260967 2013-03-27 13:22:41

相关问题