2012-03-31 1 views
5

Ich habe eine selbst gehostete WCF-Anwendung mit einfacher HTTP-Bindung, ohne SSL, die in einer Konsolenanwendung unter .NET Framework 4.0 ausgeführt wird.WCF WebGet Capture HTTP Referrer?

Ich habe ein WebGet-Attribut für eine Methode, die eine von Menschen lesbare Zeichenfolge als "Rauch-Test" zurückgibt.

Wenn ich eine ASP.NET webforms-Seite hätte, würde ich Request.UrlReferrer oder ServerVariables ("HTTP_REFERER") verwenden, um zu sehen, ob der Client seine Umleitungsinformationen freiwillig bereitstellt.

Wie kann ich das mit WCF tun?

Danke.

Antwort

5

Wenn Sie BasicHttpBinding verwenden, das WebGet Attribut wahrscheinlich ignoriert wird (es für Endpunkte, die die webHttpBinding und die WebHttpBehavior verwenden verwendet wird). Wenn Sie einen "Web" -Endpunkt (WebHttpBinding/WebHttpBehavior) verwenden, können Sie WebOperationContext.Current.IncomingRequest.Headers[HttpRequestHeader.Referer] verwenden. Wenn Sie nicht über einen Verweis auf System.ServiceModel.Web.dll haben, können Sie auch die HttpRequestMessageProperty aus der OperationContext verwenden:

HttpRequestMessageProperty prop; 
prop = (HttpRequestMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name]; 
var referer = prop.Headers[HttpRequestHeader.Referer]