2010-02-16 82 views
1

我是一個業餘愛好開發人員,我很忙於使用asp.net MVC,並試圖讓基本的Oauth通過Twitter工作。新手需要基本MVC的幫助Oauth Twitter的設置

我所做的只是把一個名爲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=(long字符串)

然後我填寫我的u/n和p/w後,它ta KES我回到我的網站: mysite.com/Twitter/callback?oauth_token=(long字符串)

,但頁面上的錯誤是:

指數超出範圍。必須是非負數且小於集合的大小。參數名稱:索引

我的問題是,回調行爲的簽名是否正確,因爲它期望從twitter返回一個字符串。顯然我需要在我的global.asax文件中添加一個路由。 那條路線會是什麼樣子? ..我已經嘗試了一切,我無法得到它的工作。是我的問題的根源還是我犯了一個編程錯誤..我不是很專業,但只是隨着我的學習。

而且,我在一個網站上測試這個,而不是localhost。

謝謝。

p.s.我已經花了很長時間在這方面,並尋求幫助作爲最後的手段,所以感謝您的好意。

+0

不是你的問題的答案,但你應該看看DotNetOpenAuth,這是一個我更熟悉的庫。它包括使用OAuth和MVC的示例(以及示例特別使用twitter)。鏈接:http://www.dotnetopenauth.net/ –

+0

非常感謝您的回答。我會檢查鏈接,希望它可以幫助我。 :) –

回答

0

看起來像var collection = HttpUtility.ParseQueryString(requestToken);沒有像你期望的那樣給你返回兩個結果;

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

我認爲你需要將集合[0]分成兩個Oauth令牌部分。