C#,ASP.NET MVC / MVC2:为特定控制器添加通配符路由 - 帮助构建路由

时间:2010-07-15 15:21:17

标签: c# asp.net-mvc asp.net-mvc-2

假设我有一个名为Store的控制器。有一种索引方法:

public ActionResult Index(string val, long? id, int? id2)
{
  return View();
}

我想要获取以下内容:

/my-store/some-text 
/my-store/some-text/
/my-store/some-text/123456789012335
/my-store/some-other-text/4562343462345
/my-store/some-other-bla-text/4562343462345/1
/my-store/some-other-bla-bla-text/45345723554/2

所以重新进行的是:
+控制器链接文本是“我的商店”,必须路由到商店控制器
+如果只有一些文字和id,那么只留下id2 null
+如果只有一些文本而没有id,那么只留下id和id2 null

以下是否正确?

routes.MapRoute(
    "Store", // Route name
    "my-store/{val}/{id}/{id2}", // URL with parameters
    new { controller = "Store", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional }
);

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

是的,除非您需要在路线中为{val}定义默认值,否则看起来很好:

routes.MapRoute(
"Store", // Route name
"my-store/{val}/{id}/{id2}", // URL with parameters
new { controller = "Store", action = "Index", val = "", id = UrlParameter.Optional, id2 = UrlParameter.Optional }

请记住清除val中的字符串,好像你有一些时髦的字符,那么你的链接将无法正常工作。比如让我们说val等于“thisis / val”,那么您的链接将是:

  

/我的商店/ THISIS / VAL /12分之1212

哪个不符合您的路线,很可能会返回404