Url路由规则冲突

本文关键字:冲突 规则 路由 Url | 更新日期: 2023-09-27 18:07:28

我在我的asp.net应用程序中实现URL路由,因为我的一些规则是冲突的。以下是我的一些相互冲突的规则:

RouteTable.Routes.Add("QuestionSubject",
    new Route("questions/{subjectname}/{pageno}",
    new RouteValueDictionary { { "pageno", null } },
    new RouteValueDictionary { { "pageno", @"^[0-9]*$" } },
    new EventRouteHandler("~/questionsitemap/subject.aspx")));
RouteTable.Routes.Add("QuestionSubjectTopic",
    new Route("questions/{subjectname}/{topicname}/{pageno}",
    new RouteValueDictionary { { "pageno", null } },
    new RouteValueDictionary { { "pageno", @"^[0-9]*$" } },
    new EventRouteHandler("~/questionsitemap/topic.aspx")));
RouteTable.Routes.Add("QuestionGrade",
    new Route("questions/{gradename}/",
    new EventRouteHandler("~/questionsitemap/grade.aspx")));
RouteTable.Routes.Add("QuestionSubjectGrade",
    new Route("questions/{gradename}/{subjectname}/",
    new EventRouteHandler("~/questionsitemap/grade.aspx")));
RouteTable.Routes.Add("QuestionSubjectTopicGrade",
    new Route("questions/{gradename}/{subjectname}/{topicname}/",
    new EventRouteHandler("~/questionsitemap/grade.aspx")));

当我请求打开QuestionGrade规则时,它正在调用QuestionSubject,因为两者的规则是相似的,同样发生在其他人的规则。

有没有人能帮我找出解决这个问题的办法

Url路由规则冲突

您需要使它们更具体,因为路由引擎无法区分{subjectname}{gradename}。您是否可以使用类似以下的东西,将/subject//grade/添加到您的路由中?

RouteTable.Routes.Add("QuestionSubject",
    new Route("questions/subject/{subjectname}/{pageno}",
    new RouteValueDictionary { { "pageno", null } },
    new RouteValueDictionary { { "pageno", @"^[0-9]*$" } },
    new EventRouteHandler("~/questionsitemap/subject.aspx")));
RouteTable.Routes.Add("QuestionGrade",
    new Route("questions/grade/{gradename}/",
    new EventRouteHandler("~/questionsitemap/grade.aspx")));