异步方法获取所需值

时间:2017-12-09 00:04:21

标签: asynchronous pageload

我有一个页面加载,我很难让它从异步按钮单击获取值。代码如下。我对此很新,所以请考虑到这一点。发生的事情本质上是代码似乎只是在单击按钮并执行GetAuthorizationCode后停止。我在getReportButton_Click中获取了temp的值,但是在Page_Load部分没有执行其他方法。本质上,我在Microsoft.Identity引用的旧版本中工作,但升级后需要将许多组件切换为异步,这就是我现在被困住的地方。

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;
        }
    }

1 个答案:

答案 0 :(得分:0)

我最终将此代码的多个方面更改为原始帖子不接近结束代码的点。记录故事简短,我在按钮单击下拉了GetAuthorizationCode()并将其移动到page_load,将输出存储到全局变量。然后我将该全局变量传递给按钮单击操作以调用其他异步任务。