当我尝试使用WebClient的DownloadString I响应错误(401)未经授权

时间:2016-08-06 20:49:06

标签: c# asp.net asp.net-mvc webclient

我尝试了解如何使用api(基于api.vk.com)。 我创建了ASP.NET MVC 4空项目。

它是Controller的一部分:

public ActionResult LoginVk()
    {
        vkProvider = new VKProvider();
        vkProvider.Config = new VkAppConfig { AppKey = "5572789", AppSecret = "i2OpN7gj62ddwTqqRJrK" };
        return Redirect(vkProvider.Authorize("http://localhost:56287/User/Access"));

    }

public string Authorize(string redirectTo)
    {
        return string.Format(AuthorizeUri, Config.AppKey, redirectTo);
    }

public ActionResult Access()
    {
        if (Request.Params.AllKeys.Contains("code"))
        {
            var code = Request.Params["code"];
            if (ProcessVkCode(code))
            {
                return RedirectToAction("List");
            }
        }
        return View("Error");
    }

protected bool ProcessVkCode(string code)
    {
        if (vkProvider.GetAccessToken(code))
        {
            var jsonVkAccess = JsonConvert.SerializeObject(vkProvider.AccessToken);
            var jObj = vkProvider.GetUserInfo();
            var vkUser = new User
            {
                FirstName = jObj.ToString(),
                LastName = jsonVkAccess.ToString()
            };

            repository.SaveUser(vkUser);
            return true;
        }
        return false;
    }

它是VKProvider模型的一部分:

public static string AuthorizeUri =
        "http://api.vkontakte.ru/oauth/authorize?client_id={0}&scope=photos,offline,wall,groups&redirect_uri={1}&response_type=code";

public static string GetTokenUri =
        "https://api.vkontakte.ru/oauth/access_token?client_id={0}&client_secret={1}&code={2}";
public bool GetAccessToken(string Code)
    {
        try
        {
            string reqStr = string.Format(GetTokenUri, Config.AppKey, Config.AppSecret, Code);
            ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
            WebClient webClient = new WebClient();
            var response = webClient.DownloadString(reqStr);
            AccessToken = JsonConvert.DeserializeObject<VkAccessToken>(response);
            return true;
        }
        catch (WebException ex)
        {
            return false;
        }
    }

应用程序返回错误(401)执行webClient.DownloadString(reqStr)时未经授权。有什么问题?

0 个答案:

没有答案