2015-07-01 24 views
9

Sto lavorando su consumando un'API REST e sto usando l'autenticazione di base dove password è codificato in Base64 come segueCome acquisire un token di risposta inviato da un'API REST dopo una richiesta?

private XmlDocument sendXMLRequest(string requestXml) 
    { 
     string destinationUrl = "https://serviceapi.testgroup.com/testtp/query"; 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl); 
     request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("API_TEST_NR:Testnol1$")); 
     byte[] bytes; 
     bytes = System.Text.Encoding.ASCII.GetBytes(requestXml); 
     request.Method = "POST"; 

     request.ContentLength = bytes.Length; 
     //request.Connection = "keep-alive"; 
     request.ContentType = "text/xml"; 
     request.KeepAlive = true; 
     request.Timeout = 2000; 
     request.MediaType = "text/xml"; 
     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(bytes, 0, bytes.Length); 
     requestStream.Close(); 
     HttpWebResponse response; 
     Stream responseStream; 

     using (response = (HttpWebResponse)request.GetResponse()) 
     { 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       responseStream = response.GetResponseStream(); 
       XmlReader reader = new XmlTextReader(responseStream); 

       XmlDocument xmlDoc = new XmlDocument(); 
       xmlDoc.Load(reader); 


       try { reader.Close(); } 
       catch { } 
       try { responseStream.Close(); } 
       catch { } 
       try { response.Close(); } 
       catch { } 
       return xmlDoc; 
      } 
     } 
     try { response.Close(); } 
     catch { } 
     return null; 
    } 

Sono una specie di nuovo a lavorare sul Web API e so che l'API risponde con un token X di accesso dopo l'autorizzazione riuscita basata sulla documentazione API e non sono sicuro di come accedervi o catturarlo dalle intestazioni HTTP.

Posso conoscere un buon metodo per raggiungerlo?

risposta

4

Questo è più facile di quanto pensassi catturando semplicemente con il suo nome.

string xtoken= response.Headers["custom-header"]; 
Console.WriteLine(xtoken); 
4

Prova questa, come di seguito, rappresenta, richiesta di dati utilizzando la maggior parte dei casi WebRequest Class.In, la classe WebRequest è sufficiente per ricevere i dati. Tuttavia, se è necessario impostare proprietà specifiche del protocollo, è necessario eseguire il cast di WebRequest sul tipo specifico del protocollo. Ad esempio, per accedere alle proprietà specifiche HTTP di HttpWebRequest, eseguire il cast di WebRequest su un riferimento HttpWebRequest.

private XmlDocument GetRootLevelServiceDocument(
string serviceEndPoint, string oAuthToken) 
{ 
XmlDocument xmlDoc = new XmlDocument(); 
HttpWebRequest request = CreateHttpRequest(serviceEndPoint, 
    oAuthToken); 

using (HttpWebResponse response = 
    (HttpWebResponse)request.GetResponse()) 
{ 
    using (XmlReader reader = 
     XmlReader.Create(response.GetResponseStream(), 
     new XmlReaderSettings() { CloseInput = true })) 
    { 
     xmlDoc.Load(reader); 

     string data = ReadResponse(response); 
     if (response.StatusCode != HttpStatusCode.OK) 
     { 
      LogMsg(string.Format("Error: {0}", data)); 
      LogMsg(string.Format(
       "Unexpected status code returned: {0}", 
       response.StatusCode)); 
     } 
    } 
} 

return xmlDoc; 
} 
+0

Ho già ricevuto la risposta. Grazie!! – DoIt

+0

Perché l'OP deve "provare questo"? Una buona risposta avrà sempre una spiegazione di cosa è stato fatto e perché è stato fatto in quel modo, non solo per l'OP ma per i futuri visitatori di SO. –