[英]400 bad request error when requesting Access_Token for facebook
我在從facebook請求訪問令牌時遇到了一些問題。 首先它起作用了。 但現在它不再起作用,我不認為我在特定的代碼行中改變了一些東西。
這是我一直在做的事情:
public static String requestAccesToken(string code)
{
//create the constructor with post type and few data
MyWebRequest myRequest = new MyWebRequest("https://graph.facebook.com/oauth/access_token?", "POST", "client_id=" + getAppID() + "&client_secret=" + getAppSecret() + "&code=" + code + "&redirect_uri=http://localhost:57689/search.aspx");
string accessToken = myRequest.GetResponse().Split('&')[0];
accessToken = accessToken.Split('=')[1];
return accessToken;
}
public static String getAppID()
{
return System.Configuration.ConfigurationManager.AppSettings["AppID"].ToString();
}
public static String getAppSecret()
{
return System.Configuration.ConfigurationManager.AppSettings["AppSecret"].ToString();
}
分類:MyWebrequest:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Text;
public class MyWebRequest
{
private WebRequest request;
private Stream dataStream;
private string status;
public String Status
{
get
{
return status;
}
set
{
status = value;
}
}
/*
* simply download the data of the web page
*/
public MyWebRequest(string url)
{
// Create a request using a URL that can receive a post.
request = WebRequest.Create(url);
}
public MyWebRequest(string url, string method)
: this(url)
{
if (method.Equals("GET") || method.Equals("POST"))
{
// Set the Method property of the request to POST.
request.Method = method;
}
else
{
throw new Exception("Invalid Method Type");
}
}
public MyWebRequest(string url, string method, string data)
: this(url, method)
{
// Create POST data and convert it to a byte array.
string postData = data;
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length;
// Get the request stream.
dataStream = request.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
}
public string GetResponse()
{
// Get the original response.
WebResponse response = request.GetResponse(); //400 ERROR BAD REQUEST
this.Status = ((HttpWebResponse)response).StatusDescription;
// Get the stream containing all content returned by the requested server.
dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content fully up to the end.
string responseFromServer = reader.ReadToEnd();
// Clean up the streams.
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
}
哪里出錯了? 我真的堅持這個。
謝謝你的閱讀!
我昨天遇到了同樣的問題。 我使用WebClient
而不是WebRequest
修復它。 我認為Http error
正在出現,因為響應是使用gzip編碼 ,因為我在redirect_uri中發送了一些參數(我不確定這是否是原因,但它現在正在工作):
try
{
WebClient wc = new WebClient();
wc.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip");
//that solves the problem with GZIP partially:
wc.Proxy = null;
using (StreamReader reader = new StreamReader(wc.OpenRead(url)))
{
string conteudo = reader.ReadToEnd();
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.