2009-06-03 6 views
1

나는 C1 또는 C2 인 경우 내가 문제로 실행 그러나 다음ASP.NET 라우팅 및 정규 표현식

route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new ResultRouteHandler()); 
route.Constraints = new RouteValueDictionary(); 
route.Constraints.Add("c1", "(.*)|([-])"); 
route.Constraints.Add("c2", "(.*)|([-])"); 
RouteTable.Routes.Add(route); 

같은 경로를 사용하도록 노력하고 있어요. 예를 들어 "a-b-c, d --- f"는 404를 반환합니다 ("a-b-c, d-e-f"는 잘 작동 함). 누구나 내가 뭘 잘못하고 있는지 알 수 있습니까? 미리 감사드립니다.

는 편집 :

나는이 문제에 대한 간단한 해결 방법을 발견

route = new Route("{w1}-{c1}-{n1},{w2}---{n2}", new MyRouteHandler()); 
RouteTable.Routes.Add(route); 
route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new MyRouteHandler()); 
RouteTable.Routes.Add(route); 

(C2) 인 경우 "-"우리가 그렇지 않으면 두 번째로, 첫 번째 경로에 일치합니다.

답변

1

, 당신이 이유입니다이 "a-b-c,d---f" 일치 싶어 당신은 우선 제약 조건을 조정하고 있습니다. 정규식은 '-''.*'과 일치하므로 중복되어 있습니다. 다시 말해서 Regex가 라우팅 엔진 파서를 책임지는 것이 아니라 라우팅 엔진 파서라고 생각합니다.

경로를 "{w1}-{c1}-{n1},{w2}-{c2}-{n2}"에서 "{w1}-{c1}-{n1},{w2}_{c2}-{n2}"으로 변경하면 이 "a-b-c,d_--f"과 일치하기 시작합니다. 필자는 경로 구문 분석에 대해 다음 값으로 구분 기호를 사용하는 것을 좋아하지 않는다고 생각합니다.

제약 조건을 삭제할 수는 있지만 (현재 존재하는 것처럼) '-'c1 또는 c2이되도록하려면 URL을 조금 다르게 구성해야 할 수 있습니다.

+0

그래, Regex가 구문 분석되는 방식 때문에 단일 경로로 규칙을 만들 수없는 것 같습니다. 나는 두 경로를 가지고이 문제를 해결했다. – niaher

0

나는 정규식 구현에 대한 100 % 긍정적 인 아니에요,하지만 생각과 같아야합니다 : 내가 제대로 이해 해요 경우

route.Constraints.Add("c1", "([^-]*)"); 
route.Constraints.Add("c2", "([^-]*)");