Новичок Нуждается в помощи с основной настройкой MVC Oauth Twitter - PullRequest
1 голос
/ 17 февраля 2010

Я хобби-разработчик, и я увлекаюсь asp.net MVC и пытаюсь просто заставить базовый Oauth работать через Twitter.

Все, что я сделал, это установил контроллер с именем Twitter с таким кодом: (это онлайн-пример для веб-форм, но я немного изменил его и поместил в 2 метода действия: индексирование и обратный вызов ... это правильный способ сделать это?)

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using OAuthLibrary;

namespace mvcTwit.Controllers
    {
        public class TwitterController : Controller
        {
            private const string AccessUrl =     "http://twitter.com/oauth/access_token";

    private const string AuthorizeUrl =  "http://twitter.com/oauth/authorize?oauth_token={0}";

    private const string RequestUrl =    "http://twitter.com/oauth/request_token";

    //
    // GET: /Twitter/
    public ActionResult Index()
    {

        // add these to web.config
        var consumerKey =    ConfigurationManager.AppSettings["consumerKey"];
        var consumerSecret = ConfigurationManager.AppSettings["consumerSecret"];

        // look for an access token in the callback
        var requestToken = Request.QueryString["oauth_token"];

        if (requestToken == null)
        {
            requestToken = OAuth.GetRequestToken(RequestUrl,
                                                 consumerKey,
                                                 consumerSecret);
            var collection = HttpUtility.ParseQueryString(requestToken);
            var authorizeUrl = String.Format(AuthorizeUrl,
                                             collection[0]);

            Response.Redirect(authorizeUrl);
        }
        return View();
    }

    public ActionResult Callback(string oauth_token)
    {
        var consumerKey = ConfigurationManager.AppSettings["consumerKey"];
        var consumerSecret = ConfigurationManager.AppSettings["consumerSecret"];
        //var requestToken = Request.QueryString["oauth_token"];
        var requestToken = oauth_token;

        // oauth is complete and callback is returning 
        // the possibly authorized request token
        var collection = HttpUtility.ParseQueryString(requestToken);

        // obtain access token
        var accessToken = OAuth.GetAccessToken(AccessUrl,
                                               consumerKey,
                                               consumerSecret,
                                               collection[0],
                                               collection[1]);
        collection = HttpUtility.ParseQueryString(accessToken);

        // make a Twitter request with the access token and secret
        var url = "http://twitter.com/account/verify_credentials.xml";
        var verify = OAuth.GetProtectedResource(url,
                                                "GET",
                                                consumerKey,
                                                consumerSecret,
                                                collection[0],
                                                collection[1]);

        ViewData["oauth_token"] = verify;
        return View();
    }

}

}

Когда я захожу на mysite.com/Twitter, он делает свое дело и берет меня на twitter.com/oauth/authorize?oauth_token=( длинная строка здесь)

Затем, после того как я заполнил свои U / N и P / W, он возвращает меня на мой сайт: mysite.com/Twitter/callback?oauth_token=( длинная строка)

но ошибка на странице:

Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс

У меня такой вопрос: верна ли подпись действия Callback, потому что она ожидает возврата строки из твиттера? И, очевидно, мне нужно добавить маршрут в мой файл global.asax. Как бы выглядел этот маршрут? .. Я перепробовал все и не могу заставить его работать. Это корень моей проблемы или я делаю ошибку в программировании .. lol

Не будь со мной строгим, я не эксперт, а просто учусь на ходу.

И я проверяю это на веб-сайте, а не на localhost.

Спасибо.

p.s. Я потратил много времени на это и ищу помощь в крайнем случае, так что спасибо за вашу доброту.

1 Ответ

0 голосов
/ 08 марта 2010

Похоже, var collection = HttpUtility.ParseQueryString(requestToken); не вернет вам два результата, как вы ожидаете;

  var accessToken = OAuth.GetAccessToken(
        AccessUrl, consumerKey, consumerSecret,
        collection[0], collection[1]);   <<-- this line is your problem?

Я думаю, вам нужно разделить коллекцию [0] на две части токена Oauth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...