2016-07-01 11 views
0

私はのOAuth2アピラッパーに取り組んでいる状況方法前提条件

。いくつかのAPIルートは、ログに記録されたユーザー用であり、一部は匿名でログに記録されています。

public async Task<UploadListResponse> List(bool pagination = false, int page = 1, int limit = 10) 
    { 
     var request = UploadRequests.List(pagination, page, limit); 

     var cancellationTokenSource = new CancellationTokenSource(); 

     var restResponse = await Context.Client.ExecuteTaskAsync(request, cancellationTokenSource.Token); 

     return restResponse.Handle<UploadListResponse>(); 
    } 

私はその要求を実行し、その後、私はその後、APIエラーと出力を持っている場合、答えを扱う設定したすべてのパラメータを指定して要求を構築する:ここで

は私のラッパー内の1つの方法の一例です要求されたすべてのデータを含むオブジェクトが私に与えたものです。

問題のOAuth2で

、あなたがAPIにログインしたときには、アクセストークンとリフレッシュトークンを受け取ります。アクセストークンが期限切れになっている場合は、新しいアクセストークンを取得するために、リフレッシュトークンでapiに連絡する必要があります。

私が以前言った私の方法のいくつかは、あなたがログインする必要がありますが、あなたのアクセストークンの有効期限が切れている場合、私はこの方法でのように、例外をスローする前に、トークンをリフレッシュするために試してみたいと:

public async Task<bool> NeedRelog() 
    { 
     try 
     { 
      var validAuth = await ValidAuth(); 
     } 
     catch 
     { 
      try 
      { 
       var refresh = await Refresh(Context.Client.Config.RefreshToken); 
      } 
      catch 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

に確認してくださいValidAuthあなたがログに記録されている場合はAPIを使用し、例外がある場合はrefreshTokenを試してみます。

NeedRelog()を呼び出すためにログに記録する必要のあるメソッドと、呼び出さないようにタグしていないメソッドにタグを付けたいとします。

私はすべての方法でそれを行うことができますが、それはきれいではありません。私のニーズに合うように思わPostSharp:私は素晴らしいツールを発見したこれまでの

をやった

私はこのようなcheckLogの側面を行うために開始しました:

[Serializable] 
public class CheckLog : OnMethodBoundaryAspect, IOnStateMachineBoundaryAspect 
{ 
    public CheckLog() 
    { 
     ApplyToStateMachine = false; 
    } 

    public override void OnEntry(MethodExecutionArgs args) 
    { 
     var instance = (ApiService)args.Instance; 
     var res = instance.Parent.OAuth.NeedRelog().Result; 

     if (!res) 
     { 
      args.Exception = new Exception("Need to relog"); 
      args.FlowBehavior = FlowBehavior.Return; 
     } 
    } 
} 

私がこだわっている

主な問題は、私のNeedRelog()メソッドを呼び出しています。実際、これは非同期メソッドなので、私は自分の面を待っているように苦労しています。

  • 私のOnEntryメソッドがasyncの場合、ログに記録されていない場合は呼び出しをブロックしません。
  • 私のOnEntryメソッドが非同期でなく、needLogを待つときにそれがフリーズして何も起こりません。

私はこの種の「条件付きメソッド呼び出し」をポストシャープで使うことを本当に知りたがっていますが、それは素晴らしいですが、実際にはドキュメントの中で何時間も探していました。 。

私がやろうとしていることを達成することさえ可能かどうか、私は自分自身に尋ねています。

+1

このような方法でコールを同期させる方法を試しましたか?http://stackoverflow.com/a/25097498/3131696? – M22an

+0

このコードスニペットの魅力は、非同期の同期方法を理解するのに役立ちました。あなた! –

+0

あなたを助けてくれてうれしい@Sebastien – M22an

答えて

1

このようなものを使用してコールを同期させる方法を試しましたか?stackoverflow.com/a/25097498/3131696? - 私が質問に答えるなどのコメントをマークすることはできませんのようM22an 5時間前

私はそれがここで言われているように、この質問は答えにするためにあなたのコメントを引用:link

おかげで、あなたはこのM22anのために。

関連する問題