【问题标题】:Newbie Needs help with basic MVC Oauth Twitter set up新手在基本的 MVC Oauth Twitter 设置方面需要帮助
【发布时间】: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


【解决方案1】:

看起来var collection = HttpUtility.ParseQueryString(requestToken); 没有按预期返回两个结果;

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

我认为您需要将集合 [0] 拆分为两个 Oauth 令牌部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2015-05-21
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多