2013-08-06 6 views
5

Ich habe die folgende C# -RESTful-Interace.So rufen Sie HTTP-Headerinformationen von einer C# -REST-Servicemethode ab

[WebGet(UriTemplate = "requires-authorization", ResponseFormat = WebMessageFormat.Json)] 
    [OperationContract] 
    string MethodRequiringAuthorization(); 

Welche

public string MethodRequiringAuthorization() 
    { 
     //var authorisazation = HTTP header authorization field 
     return "{Message" + ":" + "You-accessed-this-message-with-authorization" + "}"; 
    } 

int der folgenden Klasse implementiert Ich möchte gehen in diesem Verfahren den Wert des Feldes „Autorisierung“ im HTTP-Header (wie in der Kommentarzeile beschrieben). Irgendwelche Ideen, wie ich diesen Wert abrufen können

+0

vielleicht mit 'this.Request'? –

+1

ps: Sie können dies nützlich finden http://forums.asp.net/p/1193533/2056217.aspx –

+0

In Anbetracht der Attribute, die er oberhalb seiner Methodendeklaration verwendet, kann man davon ausgehen, dass er WCF Rest anstelle von ASP.NET Web verwendet API. Dies bedeutet, dass die Eigenschaft "Request" nicht vorhanden ist. – user1908061

Antwort

5

Ich war in der Lage zu bekommen, was ich suchte mit der HttpContext.Current Eigenschaft. Mit Hilfe der Request.Headers Eigenschaft konnte ich einen Namen Werteliste der Header-Informationen

public string MethodRequiringAuthorization() 
    { 
     HttpContext httpContext = HttpContext.Current; 
     NameValueCollection headerList = httpContext.Request.Headers; 
     var authorizationField = headerList.Get("Authorization");    
     return "{Message" + ":" + "You-accessed-this-message-with-authorization" + "}"; 
    } 
2

Haben Sie

versucht

Request.Headers["Authorization"]

+0

Ich versuchte, dass von lookng auf einen anderen Beitrag, aber ich habe nicht diese Option (Request.Headers) im Bereich. – beaumondo

0

Schnell Übersetzung von @beaumondo in VB .Net, abzurufen, die aus irgendeinem Grund, den ich für die letzten Verwendung wieder habe Monate.

Private Function GetAuthorizationFromHeader() As String 
    Dim currentContext As HttpContext = HttpContext.Current 
    Dim headerList As NameValueCollection = currentContext.Request.Headers 
    Dim authorizationField As String = headerList.Get("Authorization") 
    Return authorizationField '"{Message" + ":" + "You-accessed-this-message-with-authorization" + "}"message-with-authorization" + "}" 
End Function 

Vielen Dank, ich weiß nicht, warum ich nicht über HttpContext.Current.Request.Headers einfacher, bevor finden konnten.

Verwandte Themen