2013-05-13 1 views
13

웹 API 컨텍스트에서 실행중인 서비스 메서드 (컨트롤러 외부)에서 경로 값을 정적으로 가져 오는 방법이 있습니까? 예를 들어, 내가 ASP.NET MVC에서 다음을 수행 할 수 있습니다웹 API 경로 값 가져 오기

var mvcHandler = HttpContext.Current.Handler as MvcHandler; 
var routeValues = mvcHandler.RequestContext.RouteData.Values; 

나는 웹 API에 대한이 코드의 해당 버전을 찾을 싶습니다.

예제 웹 API 요청을 디버그하려고 시도했을 때 HttpContext.Current.Handler을 보면이 유형은 HttpControllerHandler이지만이 유형에는 경로 데이터에 액세스 할 수있는 속성이 없습니다.

편집

좀 더 많은 정보를 제공하기 위해 노력합니다. 값을 읽으려고하는 코드는 내 응용 프로그램에 대한 사용자 정의 객체를 빌드하는 팩토리 클래스 안에 있습니다.

+0

카일, 웹 API 버전의 코드를 게시 하시겠습니까? –

+0

그게 내가 알아 내려는거야 : – Kyle

+0

당신은 'System.Web.Http; var handler = Http.Current.Handler '그리고 그것이 HttpControllerHandler 인 것을 발견 했습니까? –

답변

10

MVC 요청이나 웹 API 요청에 대한 경로 값을 얻을 수있는 솔루션을 찾을 수있었습니다.

HttpContext.Current.Request.RequestContext.RouteData 
18

HttpRequestMessage에서 GetRouteData() 확장을 사용할 수 있습니다. System.Net.Http 네임 스페이스를 포함시켜야합니다.

System.Web.Http.Routing.IHttpRouteData routeData = Request.GetRouteData(); 
+0

고마워요. 이것은 컨트롤러 내에서 작동하지만 컨트롤러 외부에서는 HttpContext.Current.Request가 HttpRequestMessage 타입이 아니기 때문에 (캐스팅 될 수 없음) 나타납니다. 나는이 일을 더 잘 해명 했어야했다. – Kyle

+0

아니요, HttpRequestMessage에 액세스 할 수있는 곳이면 어디서든 액세스 할 수 있습니다. 메시지 처리기 내부 예 'Public 클래스 DelegateHandlerA : DelegatingHandler {비동기 태스크 보호 오버라이드 가 SendAsync (HttpRequestMessage 요청 CancellationToken cancellationToken) { System.Web.Http.Routing.IHttpRouteData으로 RouteData request.GetRouteData =(); HttpResponseMessage 응답 = base.SendAsync (request, cancellationToken); 대기 중입니다. 반품 답변; } } ' –

+0

BTW, GetRouteData() 확장은 WebHost (IIS) 및 SelfHost (HttpContext를 사용할 수없는 경우) 시나리오에서도 일관된 환경을 제공합니다. –