2017-07-21 3 views
0

Ich bin ein API-Schlüssel für einen grundlegenden Webdienst implementieren, die ich habe. Ich verwende eine Implementierung hier gefunden: https://blogs.msdn.microsoft.com/rjacobs/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4/ Ich weiß, ich habe es alle implementiert und Setup auf der Service-Seite, aber ich bin mir nicht sicher, wie den API-Schlüssel von meinem Client übergeben. Wenn ich den Webdienst auf Anfrage debugge, erhalte ich für meine HttpRequestMessage-Abfragezeichenfolge nichts zurückgegeben. Hier ist der Code:Hinzufügen von API-Schlüssel zu Header für WCF-Dienst zu überprüfen

Web-Service-Auth-Manager:

 public string GetAPIKey(OperationContext oc) 
     { 
      // get the request 
      var request = oc.RequestContext.RequestMessage; 
      // get HTTP request message 
      var requestProp = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name]; 
      // get the actual query string 
      NameValueCollection queryParams = HttpUtility.ParseQueryString(requestProp.QueryString); 

      // return APIKey if there, NameValueCollection returns null if not present 
      return queryParams[APIKEY]; 
     } 

Client-Verbrauch (der Teil, der zählt):

  using (WebClient client = new WebClient()) 
      { 
       client.Headers.Add("Content-Type", "application/json"); 
       client.Headers.Add("APIKey","my_generated_key"); 
       client.Encoding = Encoding.UTF8; 
       Console.WriteLine(client.UploadString("http://my_local_host/my.svc/myCall", "POST", data)); 
      } 

Während Debug wird der Web-Service immer immer leer queryParams in der Namevaluecollection weil die Abfragezeichenfolge leer ist. Wie füge ich zu dieser Abfragezeichenfolge während der Anfrage vom Client hinzu?

Antwort

0

Gelöst. Die Lösung bestand darin, nicht zu versuchen, die HttpRequestMessagePoprty.QueryString zu ziehen, sondern einfach von den Headern zu ziehen.

Code:

 public string GetAPIKey(OperationContext oc) 
     { 
      // get the request 
      var request = oc.RequestContext.RequestMessage; 
      // get HTTP request message 
      var requestProp = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name]; 
      // get the actual query string 
      NameValueCollection queryParams = requestProp.Headers; 

      // return APIKey if there, NameValueCollection returns null if not present 
      return queryParams["APIKey"]; 
     } 
Verwandte Themen