示例#1
0
        /// <summary>
        /// Call back function, where your app will get Access Token
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ActionResult Callback(Project model)
        {
            try
            {
                // if the Code from the Request URL is null, [when the User has pressed Deny button], will redirecct to sign in page
                string code1 = Request.QueryString["code"];
                if (code1 == null)
                {
                    return(Redirect("../Home/SignIn"));
                }
                else
                {
                    string code = Request.QueryString["code"];

                    string redirectUrl = RedirectUri;  //System.Configuration.ConfigurationManager.AppSettings["RedirectUri"];
                    string clientId    = ClientSecret; //System.Configuration.ConfigurationManager.AppSettings["ClientSecret"];

                    // create the request to Post the Data to get access token
                    string accessRequestBody = GenerateRequestPostData(clientId, code, redirectUrl);

                    //Get Access Token
                    accessDetails = GetAccessToken(accessRequestBody);

                    //Get User profile [ Based on your Scope selection]
                    ProfileDetails Profile = GetProfile(accessDetails);
                    Session["User"] = Profile.displayName;
                    //Get account list associated with logged in user
                    Accounts.AccountList accountList = GetAccounts(Profile.id, accessDetails);

                    model.accessToken         = accessDetails.access_token;
                    model.refreshToken        = accessDetails.refresh_token;
                    model.accountsForDropdown = new List <string>();

                    if (accountList.count > 0)
                    {
                        foreach (var account in accountList.value)
                        {
                            model.accountsForDropdown.Add(account.accountName);
                        }
                        model.accountsForDropdown.Sort();
                    }

                    return(View(model));
                }
            }
            catch (Exception ex)
            {
                return(View());
            }
        }
示例#2
0
        /// <summary>
        /// Get Account associalted with the logged in user
        /// </summary>
        /// <param name="MemberID"></param>
        /// <param name="Details"></param>
        /// <returns></returns>
        public Accounts.AccountList GetAccounts(string MemberID, AccessDetails Details)
        {
            if (Session["PAT"] != null)
            {
                Details.access_token = Session["PAT"].ToString();
            }
            Accounts.AccountList Accounts = new Accounts.AccountList();
            var    client         = new HttpClient();
            string requestContent = "https://app.vssps.visualstudio.com/_apis/Accounts?memberId=" + MemberID + "&api-version=3.2-preview";
            var    request        = new HttpRequestMessage(HttpMethod.Get, requestContent);

            request.Headers.Add("Authorization", "Bearer " + Details.access_token);
            try
            {
                var response = client.SendAsync(request).Result;
                if (response.StatusCode == HttpStatusCode.NonAuthoritativeInformation)
                {
                    Details = Refresh_AccessToken(Details.refresh_token);
                    return(GetAccounts(MemberID, Details));
                }
                else if (response.IsSuccessStatusCode)
                {
                    string result = response.Content.ReadAsStringAsync().Result;
                    Accounts = JsonConvert.DeserializeObject <Accounts.AccountList>(result);
                }
                else
                {
                    var errorMessage = response.Content.ReadAsStringAsync();
                    Accounts = null;
                }
            }
            catch (Exception ex)
            {
                return(Accounts);
            }
            return(Accounts);
        }