Я хобби-разработчик, и я увлекаюсь 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. Я потратил много времени на это и ищу помощь в крайнем случае, так что спасибо за вашу доброту.