云知笔记

详细易懂的C#开发新浪微博登录及通过新浪开放平台api读取用户信息代码分析(二)

上面的一系列请求看起来有点复杂,如果不能看懂,请访问新浪的文档,在正式做C#开发之前必须要懂得这些请求的原理,新浪的OAouth2的阐述文档链接:授权机制说明

OK,前面说了那么多,主要是在阐述微博Oauth2.0机制,现在我们用一个C#实例现在说明一下代码具体是怎么执行的。
首页我们建立一个登录页叫做:LoginTest.aspx 和它对应的cs文件LoginTest.aspx.cs,因为是测试页所以我们就只有登录页面上放一个登录按钮,具体代码如下:
LoginTest.aspx

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
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoginTest.aspx.cs" Inherits="Xweibo_test" %>

 

 

<form id="form1">
<div>

<!--这是放置的一个imageButton-->

</div>
</form>&nbsp;

LoginTest.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Xweibo_LoginTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void ImageButton1_Click1(object sender, ImageClickEventArgs e)
{
Response.Redirect("https://api.weibo.com/oauth2/authorize?display=mobile&amp;client_id=你自已的APP key&amp;redirect_uri=wblogin.ashx&amp;response_type=code");//这是imageButton被点击后执行的代码,没有C#基础知识的需要先补一下基础。
//上面的跳转链接就是OAuth2.0机制中的第一步链接,因为这一步请求可以用GET方法,所以我们直接用Response.Redirect()方法进行跳转,其中链接参数display的值为mobile表示登录显示方式为移动端样式,所以
//请大家在手机上测试该页面
}
}

注意将上面跳转链接中的参数appid替换成你自已的参数,回调页面为wblogin.ashx,后面会讲到whlogin.ashx代码

如果上面的登录页面中的链接参数正确,页面会执行微博的登录接口并显示如下图的界面:

涂掉的那个地方会显示成你的网站名称,是不是很高上大呢?

登录界面显示后,你输入你的微博测试账号,验证通过之后,程序会跳转到你的回调页面,我们这里是回调到wblogin.ashx,你没有看错,后辍名是ashx,在C#中ashx文件为纯服务端程序,在前端不会显示任何让用户看到的界面,全部在服务端执行,也就是说登录验证通过后,我们会回调到wblogin.ashx,在服务端执行一系例动作,现在我们来看看wblogin.ashx都执行了些什么:
wblogin.ashx

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
&lt;%@ WebHandler Language="C#" Class="wblogin" %&gt;
using System;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using Newtonsoft.Json.Linq;//需要加载Newtonsoft.Json.dll 到Json.Net的网站上下载该DLL 网址是http://json.codeplex.com/
using Newtonsoft.Json;//同上。
public class wblogin : IHttpHandler {

public void ProcessRequest (HttpContext context) {

string _code= context.Request.QueryString["code"];//获取第一步登录时取得的code
context.Response.ContentType = "text/plain";

// 以下用根据微博OAuth2的授权接口以POST提交数据
string postData = "grant_type=authorization_code&amp;client_id=你自已的APPkey&amp;client_secret=你自已的APP SECRET&amp;redirect_uri=WeiBoJson.html&amp;code=" + _code;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.weibo.com/oauth2/access_token?" + postData);//建立一个从后台POST的接口链接
request.Timeout = 5000;
request.Method = "POST";//方法
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string txtJson = sr.ReadLine();
var jObject = JObject.Parse(txtJson);//将返回的数据定义为一个JSON类
context.Response.Write(jObject["access_token"].ToString());

//读取JSON数据中键名为“access_token”的值并显示成字符串

string getData = "getWbname.ashx?access_token=" + jObject["access_token"].ToString() + "&amp;uid=" + jObject["uid"].ToString();
context.Response.Redirect(getData);

}

public bool IsReusable {
get {
return false;
}
}

}

上面的回调页面为WeiBoJson.html,这是一个临时回调页,可以是一个空白的html,甚至可以是一个不存在的页面,在服务端接完wblogin.ashx后,获取到Oauth2.0的令牌access_token,有了这个令牌,我们就可以调用微博的任何API接口了,在这里我们调用读取微博用户名这个接口,我们将获取到的access_token传递给另个ashx文件来调用API并读取微博用户名,这个ashx命名为getWBname.ashx
getWBname.ashx

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
&lt;%@ WebHandler Language="C#" Class="wblogin" %&gt;

using System;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using Newtonsoft.Json.Linq;//需要加载Newtonsoft.Json.dll 到Json.Net的网站上下载该DLL 网址是http://json.codeplex.com/
using Newtonsoft.Json;//同上。

public class getWbname : IHttpHandler {

public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";

string access_token = context.Request.QueryString["access_token"]; //取得传递过来的微博令牌的值
string uid = context.Request.QueryString["uid"]; //
取得传递过来的登录微博账号的uid
string getData = "access_token=" + access_token + "&amp;uid=" + uid;// 要发送的数据
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://api.weibo.com/2/users/show.json?" +getData );
request.Timeout = 5000;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string txtJson = sr.ReadLine();
var jObject = JObject.Parse(txtJson);//将返回的数据定义为一个JSON类
string KeyLogin =jObject["name"].ToString();//读取JSON数据中键名为“name”的值并转换成字符串

}

public bool IsReusable {
get {
return false;
}
}

}

程序到此整个登录验证过程就算完成了,有同学还没有看懂的,我们在这里可以捋一下:
首先:通过一个GET方法调用微博Oauth2.0授权链接获取到登录的code参数
其次:将这个code参数传递给服务端程序wblogin.ashx,通过服务端的POST方法调用微博Oauth2.0授权链接获取到微博令牌access_token
最后:将微博令牌access_token传给另一个服务端程序getWBname.ashx ,在服务端调用微博API接口获取到登录用户名等用户资料,获取后的资料可以根据应用需要传递给你的应用的其它部分使用
需要注意的是我们从微博Oauth2.0授权链接获取到所有数据都是JSON格式的,所以我们需要有读取JSON数据的方法,因此我们在两个服务端程序中都引用了命名空间 Newtonsoft.Json,这个需要加载Newtonsoft.Json.dll 到Json.Net的网站上下载该DLL 网址是http://json.codeplex.com/

在这里感谢云知笔记为我提供方便,放上一个完整的DEMO演示,大家可以看一看效果!

C#开发微博登录DEMO

4 评论 “详细易懂的C#开发新浪微博登录及通过新浪开放平台api读取用户信息代码分析(二)”

发表评论

电子邮件地址不会被公开。

+ 66 = 74