httpcontext.current.request.rawurl과 동등한 WCF는 무엇입니까?
-
22-07-2019 - |
문제
순수한 WCF 컨텍스트에서 몇 가지 편안한 서비스가 실행됩니다 (예 : ASP.NET 호환성이 활성화되지 않으므로 HttpContext.Current
사용 가능한 객체).
서비스에 대한 URL은 IHttpModule
(그 시점에서 HttpContext
그리고 그것을 사용하여 다시 작성합니다 HttpContext.Current.RewritePath
)와 같은 것들을 제거합니다 .svc
URL에서 확장.
그러나 WCF 인프라 내에서 요청 된 원래 URL에 액세스해야합니다. 동등한 것이 있습니까? HttpContext.Current.Request.RawUrl
에 OperationContext
또는 WebOperationContext
어디서나 수업? 사용 WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri
원래 URL이 아닌 다시 작성된 URL을 반환합니다.
해결책
현재 타겟팅 된 엔드 포인트와 URI를 수행 할 수 있습니다.
OperationContext.Current.RequestContext.RequestMessage.Headers.To
내가 생각하는 것은 다음과 같은 것입니다.
OperationContext.Current.IncomingMessageHeaders.To
이것은 System.Uri
물체, 그리고 나는 당신이 그냥 얻을 수 있다고 믿습니다. OriginalString
또는 PathAndQuery
, 또는 원하는 부분.
다른 팁
다음과 같은 것을 시도하십시오.
OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri
나는 그것을 사용하는 것을 발견했다
OperationContext.Current.RequestContext.RequestMessage.Headers.To
공장 대부분 당시, 그러나 내 신청서는 아니 었습니다. NLB (네트워크로드 밸런서) 뒤에있어 원래 입력 호스트 이름을 잃게됩니다. 하지만 입력 호스트는 여전히 "호스트"라는 헤더에 있으며 놀랍게도 어려웠습니다. 다음에 있습니다.
System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]
(헤더 개체 System.ServicEmodel.OperationContext.Current.incomingMessageHeaders 클라이언트의 모든 헤더를 진정으로 가지고 있지는 않았습니다)