OAuth 2.0 В .NET с API-интерфейсом Instagram

Я работаю над потреблением API Instagram, и я застрял на шаге 2 своего OAuth. У меня есть код от их перенаправления ко мне, но потом они хотят, чтобы я сделал сообщение с параметрами, как показано ниже...

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. Я попытался реализовать сообщение так...


    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?

Ответы

Ответ 1

Я получил ответ от выше упомянутого сообщения SO о добавлении параметров POST в HttpWebRequest. Вот подробности моей реализации.

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

Ответ 2

Я потратил много времени на свою задачу, потому что я не видел ответную ошибку.

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