2012-09-06 2 views
1

ASP.Net 웹 API에서 "콘텐츠 기반 라우팅"을 수행하는 방법은 무엇입니까? WCF (WCF Content based routing)ASP.Net 웹 API : 콘텐츠 기반 라우팅

+0

나는 이런 일이 일어나는 것을 보지 못했습니다. WebApi는 인바운드 스트림을 두 번 이상 읽을 수 없기 때문에 보내는 페이로드를 실제로 "검사하지"않는 방식으로 구성됩니다. 왜 당신은 컨트롤러 자체 내에서 그것을 처리 할 전략이나 무언가를 갖고 있지 않습니까? 전송되는 페이로드를 기반으로 여러 엔드 포인트를 스캔해야하는 경우가 이상합니다. – Chris

+0

이것이 좋은 기능이라고 생각합니다. 라우팅은 클라이언트가 제공 한 Content-Type 헤더의 내용을 기반으로합니다 (라우팅은 이미 다른 http 헤더 인 http 동사를 기반으로 수행되는 것과 유사합니다). 하나의 사이드 로테 @ 크리스 - 동일한 페이로드를 여러 번 읽기가 쉽지만, 단지 스트림 일뿐입니다. 완료되면 request.InputStream.Seek (0, SeekOrigin.Begin)을 수행하는 것을 기억해야합니다. – gardarh

답변

0

요청의 내용을 검사하고 사용할 리플렉션을 사용하여 ApiControllerActionSelector 클래스의 SelectAction 메서드를 재정의하면됩니다. 그런 다음, 현재 컨트롤러 컨텍스트를 전달하는 ReflectedHttpActionDescriptor의 인스턴스와 반영된 동작 메서드의 MethodInfo를 반환하면됩니다. 일치하는 메소드가 없으면 base를 호출하고 그 결과를 리턴하십시오.

샘플은 여기에서 찾을 수 있습니다. https://stackoverflow.com/a/16545954/1402786