Je suis un développeur amateur et je bricole avec asp.net MVC. J'essaie de faire fonctionner l'Oauth de base via Twitter.
Tout ce que j'ai fait, c'est mettre un contrôleur nommé Twitter avec ce code : (il provient d'un exemple en ligne pour les webforms mais je l'ai légèrement modifié et mis dans 2 méthodes d'action, index et callback est-ce la bonne façon de le faire ?)
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();
}
}
}
Quand je vais sur mysite.com/Twitter, il fait son truc et m'emmène sur twitter.com/oauth/authorize?oauth_token=(longue chaîne ici)
Ensuite, après avoir rempli mes coordonnées, je suis renvoyé sur mon site : mysite.com/Twitter/callback?oauth_token=(longue chaîne)
mais l'erreur sur la page est :
L'index était hors de portée. Il doit être non négatif et inférieur à la taille de la collection. Nom du paramètre : index
Ma question est la suivante : la signature de l'action Callback est-elle correcte car elle attend un retour de chaîne de la part de Twitter ? Et évidemment, je dois ajouter une route dans mon fichier global.asax. A quoi ressemblerait cette route ? .. J'ai tout essayé et je n'arrive pas à le faire fonctionner. Est-ce la racine de mon problème ou est-ce que je fais une erreur de programmation ?
Ne soyez pas dur avec moi, je ne suis pas un expert, mais j'apprends au fur et à mesure.
Et, je teste ceci sur un site web, pas sur un serveur local.
Merci.
p.s. J'ai passé beaucoup trop de temps sur ce sujet et je cherche de l'aide en dernier recours, alors merci de votre gentillesse.