2010-03-13 5 views
3

들어오는 URL을 표준 MVC 라우팅 논리로 전달하기 전에 일부 사전 처리를 위해 구성 요소 부분으로 구문 분석하고 싶습니다. 예를 들어 표준 경로URL을 복합 구성 요소로 구문 분석 할 수 있습니까?

{controller}/{action}/{id} 

과 URL

/user/show/10 

라우팅 시스템이 해당 값으로 컨트롤러, 액션 및 ID 키를 포함하는 사전을 반환해야 할 수있는 방법이 있나요 주어진?

+0

조회 UrlTemplate, UrlTemplateMatch. –

+0

@ 존 : 그냥 시도하고 ... Google 검색 결과를 반환 ....이 질문 :) 당신은 세부 답변을 게시할까요? –

+0

나는 그 (어제)에 대해 읽었으며 사용하지 않았다. http://msdn.microsoft.com/en-us/library/bb675245.aspx를 참조하십시오. –

답변

1

그것은, 라우팅 시스템은 응용 프로그램 시작시에 초기화됩니다 아주 간단하고, 현재의 상황에 따라 경로 데이터를 계산하므로 언제든지 상황 자체는 모든 좋은 것, 전류이다. Global.asax에의 Application_BeginRequest 방법에

, 예를 들어, 당신과 같이 현재 경로 데이터를 얻을 수 있습니다 :

var routedata = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context)); 

차례 차례로으로 RouteData는 값의 속성에 저장된 현재 요청에 대한 RouteValueDictionary을 가지고 있으며, DataTokens 속성에 저장된 데이터 토큰이 있습니다.

+0

시간을 정해 놓고 일정을 잡아야하지만 정확히 내가 겪은 것처럼 보입니다. –

0

MVC가 이미이 작업을 수행합니다. 컨트롤러 내부의 RouteData 속성에 액세스 할 수 있습니다.

MVC 라우팅 논리 앞에 경로 데이터를 가로채는 위치를 정의한 경우 더 잘 대답 할 수 있습니다.

+0

저는 이것을 고려 했습니다만, 현재 HttpApplication.BeginRequest 메소드의 URL로 작업하고 있습니다. 이것은 라우팅 시스템이 URL에 도달하기 전에 호출됩니다. 나는 단순히 일부 라우팅 메소드를 호출하고 url에서 RouteData를 반환하는 방법이 있기를 바랬다. –

0

문자열을 '/'문자로 분리하려고 했습니까? 그러면 경로 부분의 서수 배열이 생깁니다.

var parts = url.substring(1).Split('/'); 
var controller = parts[0]; 
var action = parts[1]; 
var id = parts[2]; 
+0

나는 라우팅 시스템이 그것을 어떻게 보는지 정말로 알 필요가있다. 사용중인 경로 중 일부는 여러 매개 변수가 있으므로 URL 분할은 제대로 작동하지 않습니다. –

관련 문제