OAuth 2.0 - dotNetDR_OAuth2微博API訪問組件使用教程


I:組件類庫的引用安裝

使用NuGet安裝dotNetDR_OAuth2類庫,然后點擊安裝按鈕image

或者你可以利用NuGet程序包管理器控制台輸入 Install-Package dotNetDR_OAuth2
image

當你看到項目當中已經包含dotNetDR_OAuth2的引用時,將意味着你已順利完成前期安裝工作,接下來我將為大家介紹如何使用它。

注意事項:該類庫只能在.NET Framework 4.0及以上的環境當中使用,因為類庫內部大量用了dynamic新特性。如果你是使用.NET 2.0~3.5的朋友,請另行尋找其他sdk。或者個人建議您把應用升級到.NET 4.0平台上。

II:在web.config中配置你的AppKey/AppSecret

在web.config中設置AppKey、AppSecret時,請按照以下的代碼去改寫你的key/secret。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <appSettings>
    <add key="sina.weibo.appkey" value="新浪微博appkey" />
    <add key="sina.weibo.appsecret" value="新浪微博appsecret" />

    <add key="tencent.weibo.appkey" value="騰訊微博appkey" />
    <add key="tencent.weibo.appsecret" value="騰訊微博appsecret" />
  </appSettings>

  <system.web>
    <!-- 配置省略 -->
  </system.web>

</configuration>

到了這一步,你將完成所有的組件需要配置的准備工作,在此暗暗高興一下,作者寫的組件配置和使用起來都非常簡單,也不見得非要像官方提供的一大堆自定義的配置節,讓人捉拿不透,但是各有利弊就看您怎么去衡量它了。

接下來就可以去真槍實彈玩OAuth2了!

III:編寫OAuth2代碼

首先,在編寫代碼之前我們需要建立好一個測試環境,具體原因是因為你的appkey是對應一個域名的,而我們需要做的是在系統hosts,位置位於C:\Windows\System32\drivers\etc\hosts win7用戶需要以管理員身份打開,然后將你的appkey對應的域名前加127.0.0.1添加上去然后保存。
image

然后在你的web應用程序項目里面設置一下項目屬性
image

Ok!第一步,我們需要提供一個微博登陸的功能。所以在此需要在頁面上添加2個<a />標記,一個跳到新浪微博,另一個跳到騰訊微博,所以我們需要設置他們的href屬性。如下圖
image

View頁面代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@{
    ViewBag.Title = "Home Page";
}
@model dynamic

<h2>dotNetDR_OAuth2 微博API訪問組件示例</h2>
<div>
    <hr />
    <div>
        <p><img src="http://www.cnblogs.com/Content/Images/xlwb.gif" />新浪部分</p>
        <a href="@Model.SinaLink">登陸</a> <text>|</text>
        <a href="http://open.t.sina.com.cn/wiki/API%E6%96%87%E6%A1%A3_V2">官方API</a> <text>|</text>
        <a href="http://open.weibo.com/tools/console">官方調試工具</a>
    </div>
        
    <hr />
    <div>
        <p><img src="http://www.cnblogs.com/Content/Images/txwb.gif" />騰訊部分</p>
        <a href="@Model.TencentLink">登陸</a> <text>|</text>
        <a href="http://wiki.open.t.qq.com/index.php/API%E6%96%87%E6%A1%A3">官方API</a> <text>|</text>
        <a href="http://open.t.qq.com/auth_tool/main.html#10">官方調試工具(誰用誰蛋疼)</a>
    </div>
        
    <hr />
    <div>
        <p><img src="http://www.cnblogs.com/Content/Images/myoauth2logo.png" /></p>
    </div>
</div>

 

控制器代碼如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Dynamic;

//引入dotNetDR_OAuth2組件命名空間
using dotNetDR_OAuth2;
using dotNetDR_OAuth2.AccessToken;

namespace dotNetDR_OAuth2.Sample.MVC.Controllers
{
    public class HomeController : Controller
    {
        //獲取新浪、騰訊的IAuthorizationCodeBase接口實例
         private IAuthorizationCodeBase sina = Uf.C(CtorAT.Sina);
        private IAuthorizationCodeBase tencent = Uf.C(CtorAT.Tencent);

        public ActionResult Index()
        {
            dynamic model = new ExpandoObject();

            //生成主機頭例如:http://www.yourhost.com:8081 (注:默認80端口則不會顯示:80)
            var hostPath = AccessTokenToolkit.GenerateHostPath(Request.Url);

            //定義授權成功后返回的url地址
              var sinaRedirectUrl = hostPath + Url.Action("Index", "Sina");
            var tencentRedirectUrl = hostPath + Url.Action("Index", "Tencent");

            //設置超級鏈接
              model.SinaLink = sina.GenerateCodeUrl(sinaRedirectUrl);
            model.TencentLink = tencent.GenerateCodeUrl(tencentRedirectUrl);

            Session.Remove("accessToken");

            return View(model);
        }

        public ActionResult About()
        {
            return View();
        }
    }
}

在這個過程當中,你需要引入OAuth2組件的2個命名空間如下:
image

然后初始化2個IAuthorizationCodeBase接口
image

接下來,用戶將會被引導到微博官方的登陸頁面之中!此時第三方應用收集不到用戶的密碼賬號信息!
image
在上圖中填寫正確的賬戶密碼並驗證成功后,微博網站會跳轉回我們之前設置的回調頁url上。屆時我們需要把拿到的code去換access token了!看如下代碼:
image
image
僅僅通過簡單幾步,使用OAuth2組件的朋友們就可以順利地獲取到Access token對象了。

至此關於在授權或者在調用API過程中可能引發的錯誤異常,OAuth2組件的api類接口有提供一個處理異常的方法實現:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
namespace dotNetDR_OAuth2.APIs
{
    /// <summary>
    /// 訪問OAuth2協議API的接口
    /// </summary>
    public interface IApi
    {
        /* other code */

        #region HandlerError
        /// <summary>
        /// 返回的json是否為錯誤
        /// </summary>
        /// <typeparam name="T">此泛型請傳入實現IError的具體類型(如SinaError,TencentError)</typeparam>
        /// <param name="obj">接口返回的結果</param>
        /// <param name="error">若此方法返回true則此輸出參數將不為null</param>
        /// <returns></returns>
        bool WasError<T>(dynamic obj, out T error) where T : class, IError;

        /// <summary>
        /// 調用api接口時引發異常的處理方式
        /// </summary>
        /// <typeparam name="T">此泛型請傳入實現IError的具體類型(如SinaError,TencentError)</typeparam>
        /// <param name="ex">調用api拋出的異常</param>
        /// <param name="context">當前http上下文</param>
        /// <returns></returns>
        T HandlerException<T>(Exception ex, HttpContextBase context) where T : class, IError;
        #endregion
    }   
}

接着,我們開始介紹調用API的具體使用方法。

就一般正常訪問而言。我們對微博API的調用分為如下幾個主要知識點:
image
因此我利用一個新浪微博當中比較常見的讀取公共微博接口來做一個簡單說明
jjfly

下面列出一個調用新浪微博users/show API的接口示例:
image
由於返回的結果是.NET 4.0的dynamic類型,所以在View視圖頁上面。我們可以直接動態寫出字段的屬性:
image
image
更多詳細的類庫使用說明,請查看xml文件。當然Visual Studio也會有相應的智能提示:image

image

目前你可以通過訪問dotNetDR_OAuth2在codeplex項目主頁去獲取它的源代碼。

 

IV:關於內置的Debug Tool介紹

在dotNetDR_OAuth2類庫項目內包含一個用於測試的DebugTool
image
在使用它之前你首先要在web.config內設置好appkey/appsecret及windows的hotst系統文件,具體步驟已經在上文中一一列出,在此不在重述!因為該工具是用ASP.NET MVC3編寫的,所以你的VS也需要支持MVC3的開發。對此向使用web forms的同學們致歉!作者沒有打算寫web forms版本。

現在開始運行起來了,首先我們看到主頁
image
然后我們我們按新浪微博部分下面的[登陸]連接輸入完正確的賬戶密碼后,跳轉回本站時你會發現右上角的導航會多出一個選項卡。
image
然后點擊上圖中的[api調試工具]
image
上圖示例中作者示范了調用新浪users/show.json的接口並添加screen_name = "xx",然后按Call按鈕后看到Returns文本框內出現調用成功返回的內容了。
從中可以了解到這個DebugTool的訪問令牌和令牌的微博類型是自動設置好的,你僅需要填寫調用的api的url地址和設置好api具體的參數然后按Call按鈕,就會有相應的json返回結果通過ajax請求填充到Returns文本框里面了。

V:提交bug & 技術支持

所有由調用本組件引發的bug都可以通過email,qq群(項目主頁有聯系email及qq群的信息)的方式與組件作者取得聯系。

 


本文到此結束,謝謝!

一分耕耘,期待換取您的一個推薦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM