konsumieren Meine aktuelle Aufgabe ist es, eine RESTful API mit OAuth2 zu konsumieren. Momentan habe ich herausgefunden, wie ich das Access Token bekomme und es funktioniert ok, während ich die Chrome-Extension Rest Console verwende, aber wenn ich versuche, es aus meiner Anwendung zu tun, bekomme ich immer den Fehler, dass ich eine ungültige OAuth Anfrage sende. Im Folgenden finden Sie drei Möglichkeiten, wie ich versucht habe, die API zu verwenden, aber keinen Erfolg. Die Seite gibt immer Fehler 500 zurück. Jede Hilfe wird geschätzt, wenn ich etwas Entscheidendes verpasst habe.Fehler 500 mit Autorisierung während OAuth2 RESTful-Dienst über 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
für den ersten Versuch habe ich versucht, auch die Authentifizierung an die Client-variable client.Authenticator = Authenticate;
wo OAuth2AuthorizationRequestHeaderAuthenticator Authenticate = new OAuth2AuthorizationRequestHeaderAuthenticator(item.access_token, item.token_type);
Sollten Sie wirklich 'var auth =" Bearer "+ item.access_token;' anstelle des Kennzeichens und des Geheimnisses Ihres Clients für den Tokenabruf verwenden? Woher kam das access_token, wenn Sie nur den Autorisierungscode bekommen können? Sie könnten auch versuchen, Ihre Header "Pragma", "User-Agent" und "Accept" wegzulassen, sie sind hier möglicherweise nicht notwendig. – GeorgDangl
Haben Sie versucht, in Ihrem Lösungsexplorer mit der rechten Maustaste auf "Referenzen" zu klicken und "Service-Referenz hinzufügen" zu verwenden? Es kann eine große Hilfe sein und Ihre Programmierzeit reduzieren. –
item.access_token wird früher mit einem anderen Teil der gleichen API angesprochen, wobei der zweite Versuch in meinen Code geschrieben wird. Es wird korrekt geparst und wenn ich das Token benutze, das ich mit Rest Console bekommen habe, funktioniert die API wie erwartet. Ich habe es ohne die zusätzlichen Header versucht, aber das machte keinen Unterschied. Ich habe irgendwo gelesen, dass ich das Access_Token durch die URL weitergeben kann, also habe ich das versucht - hat nicht funktioniert. – user2227904