asp.net mvc 自定义路由

jakey188 2014-05-16 02:28:07
想实现的地址:http://localhost:15030/chapter/89-10-90 or http://localhost:15030/chapter/89 or http://localhost:15030/chapter

自定义路由

routes.MapRoute(
"Defau1lt",
"{controller}/{id}-{cid}-{pid}",
new { controller = "Chapter", action = "List", id = 0, cid = 0, pid = 0 },
new { id = @"\d+", cid = @"\d+", pid = @"\d+" }
);


问题:
1.当用-组合url的时候 为什么参数默认值不能获取到,而用/就可以
2.现在能不能用1个路由规则,去实现上面3个url的路由
3.当用/组合url的时候如:http://localhost:15030/chapter/89/10/90 用上面定义的路由 -换成/ 就可以搞定
...全文
308 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
starts_2000 2014-05-19
  • 打赏
  • 举报
回复
定义就这样:
routes.MapRoute(
                "Defau1lt",
                "{controller}/{id}",
                new { controller = "Chapter", action = "List", id = “” }
            );
Action代码里面根据传入的字符串格式转换为你需要的参数
public ActionResult List(string id){
    //处理id字符串
}
jakey188 2014-05-19
  • 打赏
  • 举报
回复
别让帖子沉了
webdiyer 2014-05-19
  • 打赏
  • 举报
回复
引用 12 楼 kittying 的回复:
[quote=引用 10 楼 webdiyer 的回复:] 定义三个不同的路由: {controller}/{id}-{cid}-{pid} {controller}/{id}-{cid} {controller}/{id}
定义3个路由不是想要的结果 因为参数是不定项 [/quote] 就是因为参数不固定才要定义三个路由,根据参数来决定匹配哪个
jakey188 2014-05-19
  • 打赏
  • 举报
回复
引用 10 楼 webdiyer 的回复:
定义三个不同的路由: {controller}/{id}-{cid}-{pid} {controller}/{id}-{cid} {controller}/{id}
定义3个路由不是想要的结果 因为参数是不定项
wg5945 2014-05-19
  • 打赏
  • 举报
回复
引用 9 楼 kittying 的回复:
[quote=引用 8 楼 wg5945 的回复:] routes.MapRoute( "", "{controller}/{*catchall}", new { controller = "chapter", action = "List" } ); 全部都接了~~
是的 这样全部接了 这样接过来的参数需要对字符串进行提取 再转成自己需要的参数[/quote] 是的~~ 要不然只有写多个路由了~~
webdiyer 2014-05-19
  • 打赏
  • 举报
回复
定义三个不同的路由: {controller}/{id}-{cid}-{pid} {controller}/{id}-{cid} {controller}/{id}
jakey188 2014-05-19
  • 打赏
  • 举报
回复
引用 8 楼 wg5945 的回复:
routes.MapRoute( "", "{controller}/{*catchall}", new { controller = "chapter", action = "List" } ); 全部都接了~~
是的 这样全部接了 这样接过来的参数需要对字符串进行提取 再转成自己需要的参数
wg5945 2014-05-19
  • 打赏
  • 举报
回复
routes.MapRoute( "", "{controller}/{*catchall}", new { controller = "chapter", action = "List" } ); 全部都接了~~
jakey188 2014-05-19
  • 打赏
  • 举报
回复
看来暂时也只能这样了 转成自己需要的参数
jakey188 2014-05-19
  • 打赏
  • 举报
回复
引用 5 楼 starts_2000 的回复:
定义就这样:
routes.MapRoute(
                "Defau1lt",
                "{controller}/{id}",
                new { controller = "Chapter", action = "List", id = “” }
            );
Action代码里面根据传入的字符串格式转换为你需要的参数
public ActionResult List(string id){
    //处理id字符串
}
路由分隔符只认/ . 其他的一概不认 不知道有其他办法没
jakey188 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 wyl1027net 的回复:
http://localhost:15030/chapter/89-10-90 和http://localhost:15030/chapter/89这个路由规则完全就是两种方式,,, RouteConfig里面默认的规则可以匹配三种情况,,,, 1,不带参数 2.不带action 3,完全匹配的情况 如果想符合自己的路由规则 ,,,,,得自己写约束.
恩 这个我知道 但是http://localhost:15030/chapter/89-10-90 和http://localhost:15030/chapter/89 这2个地址 怎么写一个路由规则 因为参数是可选的
wyl1027net 2014-05-16
  • 打赏
  • 举报
回复
http://localhost:15030/chapter/89-10-90 和http://localhost:15030/chapter/89这个路由规则完全就是两种方式,,, RouteConfig里面默认的规则可以匹配三种情况,,,, 1,不带参数 2.不带action 3,完全匹配的情况 如果想符合自己的路由规则 ,,,,,得自己写约束.
jakey188 2014-05-16
  • 打赏
  • 举报
回复
求指导 求指导

62,046

社区成员

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

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

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

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