【发布时间】:2010-03-08 20:22:56
【问题描述】:
我是一名爱好开发人员,我正在使用 asp.net MVC 并试图通过 Twitter 让基本的 Oauth 工作。
我所做的只是使用以下代码放置一个名为 Twitter 的控制器: (它来自 webforms 的在线示例,但我对其稍作修改并将其放入 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=(长字符串)
但是页面上的错误是:
索引超出范围。必须是非负数且小于集合的大小。参数名称:索引
我的问题是,回调操作的签名是否正确,因为它需要从 twitter 返回一个字符串。显然我需要在我的 global.asax 文件中添加一个路由。 那条路线会是什么样子?..我已经尝试了所有方法,但我无法让它发挥作用。是我问题的根源还是我犯了编程错误..lol
别对我太苛刻,我不是专家,只是边走边学。
而且,我正在网站上测试这个,而不是本地主机。
谢谢。
附言我已经为此花费了很长时间,并且正在寻求帮助作为最后的手段,所以感谢您的好意。
【问题讨论】:
-
不是您问题的真正答案,但您可能应该查看 DotNetOpenAuth,这是一个我更熟悉的库。它包括将 OAuth 与 MVC 结合使用的示例(并且该示例专门使用了 twitter)。链接:dotnetopenauth.net
-
非常感谢您的回答。我会查看链接,希望它对我有帮助。 :)
标签: asp.net-mvc twitter oauth