2015-09-29 10 views
6

Ich versuche, diese beiden Anfragen zu senden, aber ich bekomme nur als Antwort die Fehler im Titel aufgeführt. Meine zwei webrequests auf die Google-Server sind wie folgt aus:Http Anfrage Status Code 405 ReasonPhrase: '' Youtube APi

HttpClient http = new HttpClient(); 

HttpResponseMessage response = await http.GetAsync("https://accounts.google.com/o/oauth2/token?code="+localSettings.Values["AccessKey"]+"&client_id=XX-XXXXXXXXXX.apps.googleusercontent.com&client_secret=XXXXX-XXXX&redirect_uri=http://localhost/oauth2callback&grant_type=authorization_code"); 

//response.EnsureSuccessStatusCode(); 
Debug.WriteLine(response.ToString()); 
HttpResponseMessage response1 = await http.GetAsync("https://content.googleapis.com/youtube/v3/subscriptions?part=id&maxResults=10&mine=true&key="+localSettings.Values["AccessKey"]); 
Debug.WriteLine(response1.ToString()); 

ich die folgende Ausgabe aus dem Debugger:

StatusCode: 405, ReasonPhrase: '', Version: 2.0, Content: System.Net.Http.StreamContent, Headers: 
 
{ 
 
    server: GSE 
 
    alt-svc: quic=":443"; p="1"; ma=604800 
 
    cache-control: max-age=0, private 
 
    accept-ranges: none 
 
    date: Tue, 29 Sep 2015 16:05:03 GMT 
 
    x-frame-options: SAMEORIGIN 
 
    vary: Accept-Encoding 
 
    x-content-type-options: nosniff 
 
    alternate-protocol: 443:quic,p=1 
 
    x-xss-protection: 1; mode=block 
 
    content-type: application/json 
 
    expires: Tue, 29 Sep 2015 16:05:03 GMT 
 
} 
 
StatusCode: 400, ReasonPhrase: '', Version: 2.0, Content: System.Net.Http.StreamContent, Headers: 
 
{ 
 
    server: GSE 
 
    alt-svc: quic=":443"; p="1"; ma=604800 
 
    cache-control: max-age=0, private 
 
    accept-ranges: none 
 
    date: Tue, 29 Sep 2015 16:05:04 GMT 
 
    x-frame-options: SAMEORIGIN 
 
    vary: X-Origin 
 
    vary: Origin 
 
    vary: Accept-Encoding 
 
    x-content-type-options: nosniff 
 
    alternate-protocol: 443:quic,p=1 
 
    x-xss-protection: 1; mode=block 
 
    content-type: application/json; charset=UTF-8 
 
    expires: Tue, 29 Sep 2015 16:05:04 GMT 
 
}

+0

Könnten Sie die vollständige Fehlermeldung hinterlassen bitte? – helencrump

+0

@helencrump aktualisierte Post mit Debug-Ausgabe –

+0

Sind die URLs, auf die Sie zugreifen möchten, gültig? – helencrump

Antwort

1

Kasse die Details oauth2 Zugriffstoken auf der Google API OAuth2 Fluss zu erhalten (Client-Seite) Seite - https://developers.google.com/youtube/v3/guides/auth/client-side-web-apps#Obtaining_Access_Tokens

Sie werden feststellen, dass die Ressource ein Zugriffstoken zu erhalten, ist o/oauth2/Auth und nicht o/oauth2/token (das scheint das zu sein, was Sie in Ihrem Code-Snippet verwenden) - und das sollte der Grund für die Antwort 405 (Method Not Allowed) vom Server sein.

In der Google-API-Version, die Sie verwenden, können Sie überprüfen, ob o/oauth2/Token die richtige Ressource ist das Zugriffstoken im Austausch für den Client-ID und Client-Schlüssel mit der oauth2 AUTH_CODE Erteilung Art zu bekommen?

Einige andere haben darauf hingewiesen, dass eine 405-Antwort darauf hinweist, dass die Methode für die angeforderte Ressource nicht zulässig ist. Und es scheint mir, dass die korrekte Ressource, um in API-Version 3 zu erhalten, o/oauth2/auth ist.

in Ihrem Code-Snippet Sehen, scheint es mir, dass Sie eine GET-Anfrage an den o/oauth2/Token Ressource senden die „AccessKey“ Senden über, Ihre client_id und Ihre client_secret und oauth2 grant_type = AUTH_CODE und erwartet zu erhalten ein Zugriffstoken und ein Aktualisierungstoken zurücksenden; und Sie erwarten, das so erhaltene Zugriffstoken zu verwenden, um die nächste GET-Anforderung zu stellen.

jedoch, wie bereits erwähnt, es scheint nicht, dass o/oauth2/Token die richtige Ressource ist ein Zugriffstoken in Youtube API v3 GET (vorausgesetzt, Sie diese Arbeit auf v3 zu machen versuchen)

Auch , check out https://developers.google.com/youtube/v3/getting-started < - Erste Schritte mit YouTube API (v3) und vergewissere dich, dass du die Schritte dort ausgeführt hast; Stellen Sie insbesondere sicher, dass "Stellen Sie in der API-Liste sicher, dass der Status für das YouTube Data API v3 aktiviert ist." wie in 3b vorgeschlagen. auf der Einstiegsseite.

Lassen Sie mich wissen, wenn Sie v3 der API nicht verwenden (/ versuchen zu verwenden).

+0

arbeitete für mich - ich benutze die Version v3 des API - https://accounts.google.com/o/oauth2/token ist das, was ich verwenden soll. Ich werde mir die api guides genauer ansehen. –

+0

Glücklich, dass es für Sie gearbeitet hat. – g7p

0

Wenn Sie einen Wert für localSettings.Values["AccessKey"] liefern könnte, die verursacht den Fehler, es würde helfen. Meine Vermutung ist, dass diese Variable Zeichen enthält, die codiert werden sollen. Oon Sie kommentieren Ihre sagte localSettings.Values["AccessKey"] könnte X/XXXXX sein. Wenn die resultierende URL etwas wie /token?code=X/XXXXX"... ist, können Sie versuchen /token?code=X%2FXXXXX

+0

Ich gebe das einen Versuch –

+0

localSettings.Values ​​["AccessKey"]. ToString(). Ersetzen ("/", "% 2F") hat mir leider nicht geholfen –

+0

Sorry Mann, ich aus Ideen. Vielleicht Mach es so: "..." + HttpUtility.UrlEncode (localSettings.Values ​​["AccessKey"]) + "..." Probieren Sie es aus – victor

0

Ihre erste Anforderung sollte ein HTTP-POST-Aufruf sein. Derzeit verwenden Sie GET. GET es scheint, verursacht den Fehler 405, der angibt, dass die GET-Methode nicht zulässig ist.

Verwandte Themen