Dans un service Web WCF, comment lit-on un en-tête de requête HTTP/HTTPS? Dans ce cas, j'essaie de déterminer l'hôte URL d'origine utilisé par le client. Cela peut être dans l'en-tête X-Forwarded-Host d'un équilibreur de charge, ou dans l'en-tête Host s'il s'agit d'une boîte directe.
J'ai essayé OperationContext.Current.IncomingMessageHeaders.FindHeader
mais je pense que cela regarde les en-têtes SOAP plutôt que les en-têtes HTTP.
Alors, comment lire les en-têtes HTTP? C'est sûrement une question simple et il me manque quelque chose d'évident.
EDIT - La réponse de @ sinfere était presque exactement ce dont j'avais besoin. Pour être complet, voici ce que j'ai fini avec:
IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
WebHeaderCollection headers = request.Headers;
string Host = null;
if (headers["X-Forwarded-Host"] != null)
Host = headers["X-Forwarded-Host"];
else if (headers["Host"] != null)
Host = headers["Host"];
else
Host = defaulthost; // set from a config value
Essayez WebOperationContext.Current.IncomingRequest.Headers
J'utilise les codes suivants pour voir tous les en-têtes:
IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
WebHeaderCollection headers = request.Headers;
Console.WriteLine("-------------------------------------------------------");
Console.WriteLine(request.Method + " " + request.UriTemplateMatch.RequestUri.AbsolutePath);
foreach (string headerName in headers.AllKeys)
{
Console.WriteLine(headerName + ": " + headers[headerName]);
}
Console.WriteLine("-------------------------------------------------------");
Voici comment je les lis dans l'un de mes services Web Azure WCF.
IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest;
string applicationheader = woc.Headers["HeaderName"];