Soru Bir WCF web hizmetinde HTTP istek başlıklarını nasıl okuyabilirim?


Bir WCF web hizmetinde, bir HTTP / HTTPS istek üstbilgisini nasıl okur? Bu durumda, müşterinin kullandığı orijinal URL ana bilgisayarını belirlemeye çalışıyorum. Bu, bir yük dengeleyiciden gelen X Yönlendirmeli Ana Bilgisayar başlığında veya doğrudan kutudaysa Ana Bilgisayar başlığında olabilir.

denedim OperationContext.Current.IncomingMessageHeaders.FindHeader ama bence bu, HTTP üstbilgileri yerine SOAP başlıklarına bakıyor.

Peki, HTTP üstbilgileri nasıl okunmalı? Elbette bu basit bir soru ve açık bir şey eksik.

EDIT - @ sinfere'nin cevabı neredeyse tam olarak ihtiyacım olan şeydi. Tamlık için, şu sonuca vardım:

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

32
2017-09-18 16:31


Menşei


kullan ... WebOperationContext.Current.IncomingRequest.Headers - Seymour
Teknik olarak bir başlık olmasa da, WCF içeriği orijinal HTTP İsteği'nden alır, böylece hizmetinizdeki bir Talebin içeriğine erişemezsiniz. Ancak, bir OperationsHandler içinde bir hizmet yöntemi çağrılmadan önce bunu yakalayabilirsiniz. - Itanex


Cevaplar:


Deneyin WebOperationContext.Current.IncomingRequest.Headers

Tüm başlıkları görmek için aşağıdaki kodları kullanıyorum:

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

38
2017-09-18 16:45



Bunların hepsi işe yaramadı (ikincisi Consol.WriteLine hat) ama gerisi beni oraya aldı. Teşekkürler. +1 - bill weaver


Onları Azure WCF web servislerimden birinde okudum.

IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest;

string applicationheader = woc.Headers["HeaderName"];

17
2017-09-18 16:43