国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET實現QQ、微信、新浪微博OAuth2.0授權登錄 原創

2024-07-10 12:47:26
字體:
來源:轉載
供稿:網友

不管是騰訊還是新浪,查看他們的API,PHP都是有完整的接口,但對C#支持似乎都不是那么完善,都沒有,騰訊是完全沒有,新浪是提供第三方的,而且后期還不一定升級,NND,用第三方的動輒就一個類庫,各種配置還必須按照他們約定的寫,煩而且亂,索性自己寫,后期的擴展也容易,看過接口后,開始以為很難,參考了幾個源碼之后發現也不是那么難,無非是GET或POST請求他們的接口獲取返回值之類的,話不多說,這里只提供幾個代碼共參考,拋磚引玉了。。。

我這個寫法的特點是,用到了Session,使用對象實例化之后調用 Login() 跳轉到登錄頁面,在回調頁面調用Callback() 執行之后,可以從Session也可以寫獨立的函數(如:GetOpenID())中獲取access_token或用戶的唯一標識,以方便做下一步的操作。所謂綁定就是把用戶的唯一標識取出,插入數據庫,和帳號綁定起來。

1.首先是所有OAuth類的基類,放一些需要公用的方法

public abstract class BaseOAuth{  public HttpRequest Request = HttpContext.Current.Request;  public HttpResponse Response = HttpContext.Current.Response;  public HttpSessionState Session = HttpContext.Current.Session;  public abstract void Login();  public abstract string Callback();  #region 內部使用函數  /// <summary>  /// 生成唯一隨機串防CSRF攻擊  /// </summary>  /// <returns></returns>  protected string GetStateCode()  {    Random rand = new Random();    string data = DateTime.Now.ToString("yyyyMMddHHmmssffff") + rand.Next(1, 0xf423f).ToString();    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();    byte[] md5byte = md5.ComputeHash(UTF8Encoding.Default.GetBytes(data));    return BitConverter.ToString(md5byte).Replace("-", "");  }  /// <summary>  /// GET請求  /// </summary>  /// <param name="url"></param>  /// <returns></returns>  protected string GetRequest(string url)  {    HttpWebRequest httpWebRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;    httpWebRequest.Method = "GET";    httpWebRequest.ServicePoint.Expect100Continue = false;    StreamReader responseReader = null;    string responseData;    try    {      responseReader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());      responseData = responseReader.ReadToEnd();    }    finally    {      httpWebRequest.GetResponse().GetResponseStream().Close();      responseReader.Close();    }    return responseData;  }  /// <summary>  /// POST請求  /// </summary>  /// <param name="url"></param>  /// <param name="postData"></param>  /// <returns></returns>  protected string PostRequest(string url, string postData)  {    HttpWebRequest httpWebRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;    httpWebRequest.Method = "POST";    httpWebRequest.ServicePoint.Expect100Continue = false;    httpWebRequest.ContentType = "application/x-www-form-urlencoded";    //寫入POST參數    StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream());    try    {      requestWriter.Write(postData);    }    finally    {      requestWriter.Close();    }    //讀取請求后的結果    StreamReader responseReader = null;    string responseData;    try    {      responseReader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream());      responseData = responseReader.ReadToEnd();    }    finally    {      httpWebRequest.GetResponse().GetResponseStream().Close();      responseReader.Close();    }    return responseData;  }  /// <summary>  /// 解析JSON  /// </summary>  /// <param name="strJson"></param>  /// <returns></returns>  protected NameValueCollection ParseJson(string strJson)  {    NameValueCollection mc = new NameValueCollection();    Regex regex = new Regex(@"(/s*/""?([^""]*)/""?/s*/:/s*/""?([^""]*)/""?/,?)");    strJson = strJson.Trim();    if (strJson.StartsWith("{"))    {      strJson = strJson.Substring(1, strJson.Length - 2);    }    foreach (Match m in regex.Matches(strJson))    {      mc.Add(m.Groups[2].Value, m.Groups[3].Value);    }    return mc;  }  /// <summary>  /// 解析URL  /// </summary>  /// <param name="strParams"></param>  /// <returns></returns>  protected NameValueCollection ParseUrlParameters(string strParams)  {    NameValueCollection nc = new NameValueCollection();    foreach (string p in strParams.Split('&'))    {      string[] ps = p.Split('=');      nc.Add(ps[0], ps[1]);    }    return nc;  }  #endregion}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪洞县| 仁寿县| 浙江省| 盐津县| 济南市| 偏关县| 壤塘县| 丰城市| 泰来县| 凤台县| 五大连池市| 乡城县| 武城县| 凌海市| 乌兰县| 呼玛县| 新源县| 绥宁县| 恩平市| 寿阳县| 蒙阴县| 宿州市| 花莲市| 株洲县| 繁峙县| 奉贤区| 上饶县| 拉孜县| 尚志市| 安远县| 台中市| 拜泉县| 双辽市| 东台市| 长海县| 隆化县| 绥德县| 郸城县| 尚义县| 宁陵县| 黔东|