ASP.NET 4 RouteDictionary不采用默认值

时间:2013-03-30 03:54:25

标签: c# asp.net routing

我在ASP.NET 4中有这条路线

routes.MapPageRoute("Professions",     // Route Name  
 "authors/profession/{Profession}/{letter}/page{pager}",  // Url and Parameters  
  "~/Authors/Profession/Default.aspx", true, 
new System.Web.Routing.RouteValueDictionary { { "letter", "a" }, { "pager", "1" } }); // 

如果我像这样访问页面,它会起作用 http://www.mysite.com/authors/profession/actor/a/page1

但是这不起作用http://www.mysite.com/authors/profession/actor(它应该自动添加字母'a'和第1页,我做错了什么?

1 个答案:

答案 0 :(得分:0)

您遇到的问题是路线中的文字“页面”, 后的{letter}令牌(您未在示例网址中提供)。

要使路由引擎匹配该路由,您需要在网址中的某个位置同时显示“字母”和文本“页面”。因此,您的示例/authors/profession/actor匹配,而/authors/profession/actor/a/page 匹配,并使用{pager}令牌的默认值1。< / p>

我认为解决这个问题的最佳方法是以下路线设置:

routes.MapPageRoute("Professions",     // Route Name  
 "authors/profession/{profession}/{letter}/{pager}",  // Url and Parameters  
  "~/Authors/Profession/Default.aspx", true, 
new System.Web.Routing.RouteValueDictionary { { "letter", "a" }, { "pager", "1" } });

基本上,只需将“页面”文本从路径中取出,这样当你有/authors/profession/actor时,它会直接转到字母“a”和页面“1”。完整网址就像/authors/profession/actor/d/34

这有意义吗?您的路由完全有效,但您始终必须为{letter}令牌提供内容并在其中包含文本“页面”。