2017-06-20 3 views
0

長時間にわたってoauthを実行しようとしていたので、デスクトップアプリケーションでプロダクトコールを行うことができました。私は開発者コンソールによって生成されたアクセストークンを使用して、restsharpを使用してhttp Getコールを作成することはできますが、古いトークンが1時間後に期限切れになった後に新しいアクセストークンを取得することはできません。私はまた、フィドラーを使用しようとしたが、 "HTTP 400の悪い要求"のエラーを取得し続けます。oAuthリフレッシュトークンFiddler、デスクトップアプリケーション用のC#restsharpの例

ChannelAdvisor開発 - ドキュメント:アクセストークンを更新Link

(同様のページにアクセストークンを更新にジャンプする方法を知らないの私の無知すみません。)

oauth、restsharp googleの例、何でも何百もの投稿とフォーラムの後、これをRestsharpで動作させることはできません。 http 400またはinvalid_client以外の応答を得ようとすると悲惨です。これは、投稿が回避策としてやっていたことでした。なぜなら、restsharpは魔法のようにコールを追加し、明確なパラメータを使ってメリットがあると考えていたからです。

RestSharpコード

string s = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.appID + ":" + creds.sharedSecret)); 

var client2 = new RestClient("https://api.channeladvisor.com/oauth2/token?grant_type=refresh_token&refresh_token=" + creds.refreshToken); 

var request2 = new RestRequest(); 
request2.Method = Method.POST; 
request2.Parameters.Clear();    
request2.AddHeader("Authorization", s); 
request2.AddHeader("Content-Type", " application/x-www-form-urlencoded"); 
request2.AddHeader("Cache-Control", "no-cache"); 

IRestResponse response2 = client2.Execute(request2); 

だから私はシオマネキに行って、ちょうどスクラッチパッドにサンプルコードを貼り付けし、無駄に、私のトークンを追加しました。

POST /oauth2/token HTTP/1.1 
Host: api.channeladvisor.com 
Authorization: Basic MY_ENCODED_APPID:SHARED_SECRET 
Content-Type: application/x-www-form-urlencoded 
Cache-Control: no-cache 

grant_type=refresh_token&refresh_token=xxxxxxxxxxxxxxxxxxxxxmNZtF-cpLy44DV4DQ9Q 

これは400エラーも返します。 SOAP APIはユーザー名とパスワードを認証するだけで簡単でしたが、SOAPが提供していない情報が少し必要です。任意の助けを歓迎します。好ましくは、チャネルアドバイザの呼び出し形式を使用したフィドラーまたはレストシャープの例です。

+0

あなたはrefreshtokenもの(grant_type = refresh_token&refresh_token =置く必要がある」リクエストのボディに+ creds.refreshToken)をしていないURLパラメータとして追加します。さらに、あなたが不足している 『あなたのAuthorizationヘッダーにBasicを』 – PtrBld

+0

@PtrBldが私を正しい方向に導いた – zerodoc

答えて

1

私はそれを動作させるために何をしましたか?

string s = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.appID + ":" + creds.sharedSecret)); 

      var client2 = new RestClient("https://api.channeladvisor.com/oauth2/token"); 

      var request2 = new RestRequest(); 
      request2.Method = Method.POST; 
      request2.Parameters.Clear(); 
      request2.AddHeader("Authorization", "Basic " + s); 
      request2.AddHeader("Content-Type", " application/x-www-form-urlencoded"); 
      request2.AddHeader("Cache-Control", "no-cache"); 
      request2.AddParameter("grant_type", "refresh_token"); 
      request2.AddParameter("refresh_token", creds.refreshToken); 

      IRestResponse response2 = client2.Execute(request2); 
関連する問題