非同期ボタンクリックから値を取得するのに問題が発生しているページがあります。コードは以下の通りです。私はこれに非常に新しいので、考慮に入れてください。何が起こるかは、ボタンがクリックされ、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;
}
}
私は、前のコードでは、データをparamsプロパティに戻し、コードパラメータの存在をチェックしていたことに気付きました。新しいバージョンのコードでは、これをやっていないのですが、非同期のボタンクリックタスクの後に停止するのはなぜかと思います。 – jroby
私はコードの大半を整理しましたが、私が苦労している問題は、pageRoadがgetReportButton_Click戻り値を待つことです。 – jroby