2017-12-09 4 views
0

非同期ボタンクリックから値を取得するのに問題が発生しているページがあります。コードは以下の通りです。私はこれに非常に新しいので、考慮に入れてください。何が起こるかは、ボタンがクリックされ、GetAuthorizationCodeが実行された後にコードが停止するように見えるということです。私はgetReportButton_Clickの一時応答で値を取得しますが、他のメソッドはPage_Loadセクションでは実行されません。基本的には、Microsoft.Identity参照の古いバージョンで動作していましたが、アップグレード後に多くのコンポーネントを非同期に切り替える必要がありました。asyncメソッドが必要な値を取得した後、Page_Loadが処理されていません

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.Params.Get("code") != null) 
     { 
      Session["AccessToken"] = GetAccessToken(); 
      Response.Redirect("/Default.aspx"); 
     } 

     if (Session["AccessToken"] != null) 
     { 
      accessToken.Value = Session["AccessToken"].ToString(); 
      GetReport(0); 
     } 
    } 


protected async void getReportButton_Click(object sender, EventArgs e) 
    { 
     var temp = await GetAuthorizationCode(); 
     Response.Write(temp); 
    } 

public async Task<string> GetAuthorizationCode() 
    { 
     var serviceUri = "XXXXXXXX"; 
     var clientID = "XXXXXXXXX"; 
     var userName = $"XXXXXXXX"; 
     var password = "XXXXXXXXX"; 

     using (var webClient = new WebClient()) 
     { 
      var requestParameters = new NameValueCollection(); 

      requestParameters.Add("resource", serviceUri); 
      requestParameters.Add("client_id", clientID); 
      requestParameters.Add("grant_type", "password"); 
      requestParameters.Add("username", userName); 
      requestParameters.Add("password", password); 
      requestParameters.Add("scope", "openid"); 

      var url = $"XXXXXXXXXXXX"; 
      var responsebytes = await webClient.UploadValuesTaskAsync(url, "POST", requestParameters); 
      var responsebody = Encoding.UTF8.GetString(responsebytes); 
      return responsebody; 
     } 
    } 
+0

私は、前のコードでは、データをparamsプロパティに戻し、コードパラメータの存在をチェックしていたことに気付きました。新しいバージョンのコードでは、これをやっていないのですが、非同期のボタンクリックタスクの後に停止するのはなぜかと思います。 – jroby

+0

私はコードの大半を整理しましたが、私が苦労している問題は、pageRoadがgetReportButton_Click戻り値を待つことです。 – jroby

答えて

0

私はこのコードの複数の側面を元の投稿がエンディングコードに近づかないように変更しました。短いストーリーをログして、GetAuthorizationCode()をボタンのクリックの下に引っ張り、それをpage_loadに移動し、出力をグローバル変数に格納しました。次に、そのグローバル変数をボタンのクリックアクションに渡して、他の非同期タスクを呼び出します。

関連する問題