MVC RouteConfig 路由匹配求解

nicholsky 2016-12-07 11:23:03
一个Controller有多个不同名的Action。希望可以根据不同的参数匹配到不同的Action,不知能否做到?

public class HomeController : Controller
{
public ActionResult A(string parea1) { return View(); }
public ActionResult B(string parea1) { return View(); }

public ActionResult C(string parea2) { return View(); }
public ActionResult D(string parea2) { return View(); }
}

如下写法永远只能匹配其中一个
routes.MapRoute("1", "Home/{action}/{parea1}", new { controller = "Home" });
routes.MapRoute("1", "Home/{action}/{parea2}", new { controller = "Home" });

希望做到的是 ,输入以下地址可以全部匹配到对应的Action:
Home/A/123
Home/B/123
Home/C/123
Home/D/123

提示:不要跟我说路由里写死Action,因为不上这么少的,参数为parea1的Action有好多个,参数为parea2的Action也有很多个。
...全文
261 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicholsky 2016-12-07
  • 打赏
  • 举报
回复
可能我說的有問題,我意思是上面的路由都能匹配,只是我希望那些參數也能對應一一獲取。 public class HomeController : Controller { public ActionResult A(string parea1) { return View(); } public ActionResult B(string parea1) { return View(); } public ActionResult C(string parea2) { return View(); } public ActionResult D(string parea2) { return View(); } } Home/A/123 Home/B/123 Home/C/123 Home/D/123 這4個連接分別調用對應的方法是肯定沒問題的,但是A和B的參數名(parea1)和C和D的參數名(parea2)不同,所以路由規則只能是其中一個。所以action裏面不能獲取parea1或parea2,不能寫成action,應該點做?
nicholsky 2016-12-07
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
除非你区分action的 访问方式,注明 httppost或者httpget等等属性。 不然mvc和webapi貌似都不支持action的重载吧? 就像这样是可以的

[HttpGet]
public ActionResult Get()
[HttpPost]
public ActionResult Get()
你看錯了,我的Action是不同名的,不存在重載問題。
正怒月神 版主 2016-12-07
  • 打赏
  • 举报
回复
除非你区分action的 访问方式,注明 httppost或者httpget等等属性。 不然mvc和webapi貌似都不支持action的重载吧? 就像这样是可以的

[HttpGet]
public ActionResult Get()
[HttpPost]
public ActionResult Get()
nicholsky 2016-12-07
  • 打赏
  • 举报
回复
Action是找到,但参数对不上。例如这种情况,第一条规则生效,所以全部都是参数parea1=123,而后面两个我希望是带parea2=123这样的
正怒月神 版主 2016-12-07
  • 打赏
  • 举报
回复
你既然路由已经定义了 {action} 那你访问的时候不是已经可以找到对应的action了吗?
nicholsky 2016-12-07
  • 打赏
  • 举报
回复
public class HomeController : Controller { public ActionResult A(string parea1) { Response.Write(parea1); return View(); } public ActionResult B(string parea1) { Response.Write(parea1); return View(); } public ActionResult C(string parea2) { Response.Write(parea2); return View(); } public ActionResult D(string parea2) { Response.Write(parea2); return View(); } } 我意思是如下的4個action,我要求在action裏面可以獲取參數值(即Response.Write(xxx);當中xxx的內容) 以下肯定無問題 Home/A/?parea1=123 Home/B/?parea1=123 Home/C/?parea2=123 Home/D/?parea2=123 但是這樣就不行了 Home/A/123 Home/B/123 Home/C/123 Home/D/123 我就是要求寫好路由規則,讓上面那樣請求,在對應的action裏能獲取那個123的參數值。不能寫死action名,因爲有很多方法的。
正怒月神 版主 2016-12-07
  • 打赏
  • 举报
回复
你是要在哪里获取参数, 我到现在也没明白你的意思

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧