web-dev-qa-db-fra.com

Comment lire les en-têtes de requête HTTP dans un service Web WCF?

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
37
b w

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("-------------------------------------------------------");
47
sinfere

Voici comment je les lis dans l'un de mes services Web Azure WCF.

IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest;

string applicationheader = woc.Headers["HeaderName"];
24
Slack Shot