使用Instagram API在.NET中使用OAuth 2.0

我正在努力使用Instagram API,我被困在他们的OAuth的第2步。 我有一个代码从他们的重定向回到我,但然后他们希望我做一个如下参数的post…

curl \ -F 'client_id=CLIENT-ID' \ -F 'client_secret=CLIENT-SECRET' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=YOUR-REDIRECT-URI' \ -F 'code=CODE' \ https://api.instagram.com/oauth/access_token 

我将其实现为ASP.NET MVC 3解决方案。 我试着像这样实施post……

 WebRequest request = HttpWebRequest.Create("https://api.instagram.com/oauth/access_token"); request.Method = "POST"; request.Headers.Add("client_id", "sdlf0982jiejfopijfp92jjiwoijf90"); request.Headers.Add("client_secret", "39993939393939393939393939393"); request.Headers.Add("grant_type", "authorization_code"); request.Headers.Add("redirect_uri", "http://localhost:34962/Home/Auth"); request.Headers.Add("code", 111111); var response = request.GetResponse(); return View(); 

这给了我一个400错误,说“client_id是必需的”。 我已经包含了client_id,但我显然没有正确实现它。

执行OAuth第二站的“最佳实践”方法是什么?

我从上面提到的关于将POST参数添加到HttpWebRequest的SOpost中得到了答案。 以下是我的实施细节。

 NameValueCollection parameters = new NameValueCollection(); parameters.Add("client_id", "3498wjfoi2892jf0j2ij02fjakjf2"); parameters.Add("client_secret", "392621gfdlfj2k2hf7g2lfhj2g"); parameters.Add("grant_type", "authorization_code"); parameters.Add("redirect_uri", "http://localhost:34962/Home/Auth"); parameters.Add("code", code); WebClient client = new WebClient(); var result = client.UploadValues("https://api.instagram.com/oauth/access_token", parameters); var response = System.Text.Encoding.Default.GetString(result); return View("Index", (object)response); 

我花了很多时间在我的任务上,因为我没有看到响应错误。

  try { NameValueCollection parameters = new NameValueCollection(); parameters.Add("client_id", "638ed32066b04801bd40aa05c1542915"); parameters.Add("client_secret", "fc67cf3645a648ce82106298010acd65"); parameters.Add("grant_type", "authorization_code"); parameters.Add("redirect_uri", "http://localhost:34962/Test/InstagramCallback"); parameters.Add("code", code); WebClient client = new WebClient(); var result = client.UploadValues("https://api.instagram.com/oauth/access_token", "POST", parameters); return Encoding.Default.GetString(result); } catch (WebException ex) { StreamReader reader = new StreamReader(ex.Response.GetResponseStream()); string line; StringBuilder result = new StringBuilder(); while ((line = reader.ReadLine()) != null) { result.Append(line); } return result.ToString(); }