2012-08-09 2 views
0

웹 양식 4 프로젝트가 있고 URL 라우팅을 사용합니다.Webforms 4 개의 URL 라우팅 다중 일치

특정 경로가 둘 이상의 패턴과 일치하는 경우가 있습니다.

라우팅 메커니즘이 각 패턴을 특정 순서로 시도하고 첫 번째 일치에서 중지하는 것 같습니다. (내가 틀렸다면 정정 해주세요). 선택한 패턴에 대한 리소스 (주로 aspx 파일)가 존재하지 않으면 404 오류가 발생합니다 (리소스가 존재하지 않음).

다음 일치 패턴은 기존 자원에 매핑되지만 메커니즘은이를 시도하지 않습니다. (유사한 투 MVC 명명 규칙을 사용하여)

routes.MapPageRoute("Action", "{controler}/{action}/{*pathInfo}", "~/Views/{controler}/{action}.aspx"); 
routes.MapPageRoute("Overview", "{controler}/{*pathInfo}", "~/Views/{controler}/Overview.aspx"); 

그래서 파일 시스템의 /Views/Patient/Overview.aspx 및 /Views/Patient/Search.aspx있다.

경로 "/환자"두 번째 패턴과 일치하고 "/Views/Patient/Overview.aspx"

경로 "/환자/검색는"첫 번째 일치하는지도한다 패턴과 "/Views/Patient/Search.aspx"

경로 "/환자/검색/SomePathInfo"에서 "/조회/환자/바다를 첫 번째 패턴과 일치하고 매핑됩니다에 매핑 rch.aspx "(치료"SomePathInfo /환자/SomePathInfo "모두 패턴과 일치"는 {* panthinfo} 일환으로 URL의 일부)

이제 문제는 경로가 있다는 것입니다. " 첫 번째 것은 "SomePathInfo"를 {동작} 부분으로 처리합니다 (존재하지 않는 "/Views/Patient/SomePathInfo.aspx"을 검색). 두 번째는 "SomePathInfo"를 {* pathInfo} 부분으로 처리하고 기존 "/Views/Patient/Overview.aspx"에 매핑합니다.

메커니즘은 첫 번째 시도를 시도하지만 SomePathInfo.aspx 파일을 찾을 수 없으며 404 오류를 발생시킵니다.

내 질문 가 기존 자원을 찾을 때까지 각 패턴을 시도하는 메커니즘을 직접 할 수있는 방법이 있나요 "입니다(또는 일부 조건이 만족 될 때까지,보다 일반적인? [여기 : resource.exists] "!

답변

0

자리 등 그래서 내가

위에서 설명한 내 문제에 대한 해결 방법은. 라우팅 제약 조건을 사용하여 {동작} 자리 표시 자에 대한 가능한 값의 제한된 집합을 정의하는 것입니다 같은 것은 {컨트롤러} 적용 "인덱스", "세부 사항", "추가", "편집", "선택"등 및 컨트롤러와 같은 목록의 작업 만 수락하도록 제약 조건 정의 "가정", "환자", "사건"등의 목록; 나는 "환자/somequery"같은 것을 입력 할 때

routes.MapPageRoute("Action", "{controler}/{action}/{*queryValues}", "~/Views/{controler}/{action}.aspx", true, 
      new RouteValueDictionary { // Default values 
       { "controller", "home"}, 
       { "action", "index"} }, 
      new RouteValueDictionary { // constraints 
       { "controller", "home|patient|incident"}, 
       { "action", "index|details|add|delete|edit|select"} }); 

그 방법은 "somequery"문자열이 매핑의 제약 조건을 만족하지 않기 때문에 메커니즘 다음 하나에 continoues하고는 "somequery"부분을 취급 {* queryvalues}는 {action}이 아닙니다.

는하지만 문제는 여전히 유효 :

"는 기존 자원을 찾을 때까지 각 패턴을 시도하는 메커니즘을 직접 할 수있는 방법이 있나요(또는 일부 조건이 만족 될 때까지,보다 일반적인 [? 여기 : resource.exists] "