Il mio lavoro corrente consiste nel consumare un'API RESTful con OAuth2. Attualmente ho capito come ottenere il token di accesso e funziona bene mentre utilizzo l'estensione chrome Rest Console, ma quando provo a farlo dalla mia applicazione ottengo sempre l'errore che sto inviando una richiesta OAuth non valida. Qui sotto puoi vedere tre dei modi in cui ho provato a utilizzare l'API, ma senza successo. La pagina restituisce sempre l'errore 500. Qualsiasi aiuto sarà apprezzato, se mi fosse sfuggito qualcosa di cruciale.Errore 500 con autorizzazione durante il consumo del servizio RESTful OAuth2 tramite C#
var auth = "Bearer " + item.access_token;
/* First Attempt */
var client = new RestClient("http://<link>");
var request = new RestRequest("sample", Method.GET);
request.AddHeader("Authorization", auth);
request.AddHeader("Content-Type", "application/json;charset=UTF-8");
request.AddHeader("Pragma", "no-cache");
request.AddHeader("User-Agent", "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36");
request.AddHeader("Accept", "application/json");
request.RequestFormat = DataFormat.Json;
var response = client.Execute(request);
var content = response.Content;
/* Second Attempt */
string sURL = "http://<link>/sample";
string result = "";
using (WebClient client = new WebClient())
{
client.Headers["Authorization"] = auth;
client.Headers["Content-Type"] = "application/json;charset=UTF-8";
client.Headers["Pragma"] = "no-cache";
client.Headers["User-Agent"] = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
client.Headers["Accept"] = "application/json";
byte[] byteArray = Encoding.UTF8.GetBytes(parameters);
var result1 = client.DownloadString(sURL);
}
/* Third Attempt */
var request = (HttpWebRequest)WebRequest.Create(sURL);
request.Method = "GET";
request.ContentType = "application/json;charset=UTF-8";
request.Accept = "application/json";
request.Headers["Authorization"] = auth;
request.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
string content;
HttpStatusCode statusCode;
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
var contentType = response.ContentType;
Encoding encoding = null;
if (contentType != null)
{
var match = Regex.Match(contentType, @"(?<=charset\=).*");
if (match.Success)
encoding = Encoding.GetEncoding(match.ToString());
}
encoding = encoding ?? Encoding.UTF8;
statusCode = ((HttpWebResponse)response).StatusCode;
using (var reader = new StreamReader(stream, encoding))
content = reader.ReadToEnd();
}
-------- -------- EDIT
Per il primo tentativo ho anche provato ad aggiungere l'autenticazione al cliente variabile client.Authenticator = Authenticate;
dove OAuth2AuthorizationRequestHeaderAuthenticator Authenticate = new OAuth2AuthorizationRequestHeaderAuthenticator(item.access_token, item.token_type);
Se si sta veramente usando 'var auth =" Bearer "+ item.access_token;' invece dell'identificatore e del segreto del client per il recupero dei token? Da dove viene l'access_token se riesci solo a ottenere il codice di autorizzazione? Potresti anche provare a escludere le intestazioni "Pragma", "User-Agent" e "Accept", potrebbero non essere necessarie qui. – GeorgDangl
Hai provato a fare clic con il pulsante destro del mouse su "Riferimenti" in Esplora soluzioni e utilizzando "Aggiungi riferimento servizio"? Potrebbe essere un grande aiuto e ridurre i tempi di programmazione. –
item.accesss_token si è ottenuto in precedenza indirizzando un'altra parte della stessa API utilizzando il secondo tentativo scritto nel mio codice. È analizzato correttamente e se utilizzo il token ottenuto da questo con Rest Console, l'API funziona come previsto. Ho provato senza le intestazioni aggiuntive, ma non ha fatto alcuna differenza. Ho letto da qualche parte che posso passare access_token attraverso l'url, quindi ho provato a farlo, non ha funzionato. – user2227904