asp.net路由问题和冲突

时间:2015-02-20 19:56:34

标签: asp.net webforms

我正在使用asp.net路由来显示一些页面,但它是冲突的,前两个正在工作,但第三个进入第二个路径,尽管我有一个单独的页面可以工作。

routes.MapPageRoute(
          "post",
          "{postname}-{postid}/",
          "~/post.aspx"
      );

routes.MapPageRoute(
          "Posts",
          "{Category}/{PageNo}/",
          "~/posts.aspx", true,
            new RouteValueDictionary { { "PageNo", "" } }
      );

routes.MapPageRoute(
          "News",
          "{News-Category}/{PageNo}/",
          "~/news.aspx", true,
            new RouteValueDictionary { { "PageNo", "" } }
      );

感谢任何帮助

感谢

1 个答案:

答案 0 :(得分:0)

PostsNews路由具有完全相同的URL签名。也就是说,具有2个段的任何 URL将始终与Posts路由匹配,并且News路由是无法访问的执行路径。

您需要使用一个或多个常量段或一个或多个约束来确保有两段路由PostsNews路径可能会错过。

routes.MapPageRoute(
      "post",
      "{postname}-{postid}",
      "~/post.aspx"
  );

routes.MapPageRoute(
      "Posts",
      "Category/{PageNo}",
      "~/posts.aspx", true,
        new RouteValueDictionary { { "PageNo", UrlParameter.Optional } }
  );

routes.MapPageRoute(
      "News",
      "News-Category/{PageNo}",
      "~/news.aspx", true,
        new RouteValueDictionary { { "PageNo", UrlParameter.Optional } }
  );

将路由视为switch case语句。如果条件匹配,则路线将返回。但是如果你有两条路线都匹配相同的条件,第一条路线将永远胜利而第二条路线将无法到达。