我正在访问采用不同数量参数的不同操作,但即使应用自定义路由,也始终会对同一操作进行调用。 控制器数据-----
[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
什么是可能的解决方案。任何建议,帮助将不胜感激。
答案 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