Was ist der WCF-Äquivalent von HttpContext.Current.Request.RawUrl?
-
22-07-2019 - |
Frage
ich einige RESTful Dienste in einem reinen WCF Kontext ausgeführt haben (das heißt ASP.NET-Kompatibilität nicht aktiviert ist, und somit gibt es keine HttpContext.Current
Objekt vorhanden).
Die URLs zu den Diensten zu Beginn des Antrags neu geschrieben werden unter Verwendung eines IHttpModule
(die an diesem Punkt eine HttpContext
hat und schreibt es HttpContext.Current.RewritePath
verwenden) aus der URL wie die .svc
Erweiterung loszuwerden Dinge zu bekommen.
Allerdings muss ich die ursprüngliche URL zugreifen, die von innerhalb der WCF-Infrastruktur angefordert wurde. Gibt es ein Äquivalent zu den HttpContext.Current.Request.RawUrl
oder OperationContext
Klassen überall WebOperationContext
? Mit WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri
kehrt die umgeschriebenen URL nicht das Original.
Lösung
können Sie erhalten den Endpunkt zur Zeit gezielt und Uri für sie, indem Sie:
OperationContext.Current.RequestContext.RequestMessage.Headers.To
, die ich denke, ist das gleiche wie:
OperationContext.Current.IncomingMessageHeaders.To
Dies ist ein System.Uri
Objekt, und ich glaube, man kann nur das OriginalString
oder PathAndQuery
bekommen, oder was auch immer Teile, die Sie von ihm wollen.
Andere Tipps
versuchen, etwas wie folgt aus:
OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri
Ich habe, dass die Verwendung gefunden
OperationContext.Current.RequestContext.RequestMessage.Headers.To
Werke most der Zeit, aber nicht für meine Anwendung. Es ist hinter einem NLB (Network Load Balancer), die die ursprünglichen Eingangshostnamen verlieren verursacht. Aber der Eingang Host ist immer noch in einem Header namens „Host“, die überraschend schwer zu bekommen. Es befindet sich unter:
System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]
(die Header-Objekte System.ServiceModel.OperationContext.Current.IncomingMessageHeaders nicht wirklich alle Header aus dem Client)