2011-09-02 3 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"))); 

나는 규칙이 모두 유사하기 때문에 그것은 QuestionSubject를 호출하는 QuestionGrade 규칙을 열 요청하고, 같은 다른 사람들이 규칙에 무슨 일이 있었 .

이 문제에 대한 해결책을 찾으려면 아무도 도와주세요.

답변

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

같은 정적 디렉토리 당신은 종류의 선택의 여지가 없어 싶지 않아요. 첫 번째 "questions/{}/{}"구조는 항상 승리 할 것입니다. 약간의 다른 수준의 모호성 제거가 있어야합니다. –