2011-09-02 159 views
2

我在我的asp.net应用程序中实现URL路由,因为我的一些规则是冲突的。下面 是我的一些规则,这是矛盾的: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因为规则对于两个相似的,同样的事情发生了他人排除。

请任何人帮我找出解决方案。

回答

1

由于路由引擎无法区分{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"))); 
+0

:但我的客户不希望像“主题”或“等级” – Vijjendra

+1

任何静态目录你,如果你使用的路由喜欢那种没有任何选择。第一个“问题/ {}/{}”结构总是会赢的。必须有一些其他级别的消歧。 –