入园一年多,第一次发文章,权当为自己记录...
Metro很多方法和以前不同,许多方法都要加上async与await,http连接也一样如此...
1 . Oauth2认证是必不可少的
详情就不细说,可以看新浪上给出的文档,很清晰了..
client_id和client_secret同样自己在新浪申请,没什么可说的啦~
具体方法如下:
////// OAuth2.0授权 /// static private async TaskOAuth(string username, string password) { bool islogin=false; dialog_url = "https://api.weibo.com/oauth2/access_token"; //发起POST连接 HttpClient client = new HttpClient(); //准备POST的数据 var postData = new List >(); postData.Add(new KeyValuePair ("client_id", App_Key)); postData.Add(new KeyValuePair ("client_secret", App_Secret)); postData.Add(new KeyValuePair ("grant_type", "password")); postData.Add(new KeyValuePair ("username", username)); postData.Add(new KeyValuePair ("password", password)); HttpContent httpcontent = new FormUrlEncodedContent(postData); HttpResponseMessage response = await client.PostAsync(dialog_url, httpcontent); //返回的信息 string responseBody = await response.Content.ReadAsStringAsync(); //匹配返回信息 Match regex_back = regex.Match(responseBody); string value; while (regex_back.Success) { value = regex_back.Value.Substring(1, regex_back.Value.Length - 2); switch (value) { case "access_token": regex_back = regex_back.NextMatch(); _access_token = regex_back.Value.Substring(1, regex_back.Value.Length - 2); continue; case "uid": regex_back = regex_back.NextMatch(); uid = regex_back.Value.Substring(1, regex_back.Value.Length - 2); islogin=true; break; } regex_back = regex_back.NextMatch(); } return islogin; }
2.拿发布一条新微博来看
请求参数
必选 | 类型及范围 | 说明 | |
---|---|---|---|
source | false | string | 采用OAuth授权方式不需要此参数,其他授权方式为必填参数,数值为应用的AppKey。 |
access_token | false | string | 采用OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获得。 |
status | true | string | 要发布的微博文本内容,必须做URLencode,内容不超过140个汉字。 |
lat | false | float | 纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。 |
long | false | float | 经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0。 |
annotations | false | string | 元数据,主要是为了方便第三方应用记录一些适合于自己使用的信息,每条微博可以包含一个或者多个元数据,必须以json字串的形式提交,字串长度不超过512个字符,具体内容可以自定。 |
////// 发表一条微博 /// /// 微博内容 static public async TaskUpdate(string status) { dialog_url = "https://api.weibo.com/2/statuses/update.json"; HttpClient client = new HttpClient(); ////准备POST的数据 var postData = new List >(); postData.Add(new KeyValuePair ("access_token", _access_token)); postData.Add(new KeyValuePair ("status", status)); HttpContent dataContent = new FormUrlEncodedContent(postData); //发起POST连接 HttpResponseMessage response = await client.PostAsync(dialog_url, dataContent); //返回的信息 responseBody = await response.Content.ReadAsStringAsync(); Match regex_back = regex.Match(responseBody); string value; while (regex_back.Success) { value = regex_back.Value.Substring(1, regex_back.Value.Length - 2); switch (value) { case "created_at": return true; } } return false; }
这样就OK了...返回true就发不成功了....
3.另外提一下,发图片时要用MultipartFormDataContent 发送多种类型的格式..StreamContent 则可以用来发送图片流..