如何解决facebook Graph API使用asp.net发送帖子,而c#无法正常工作
我想通过asp.net和c#将帖子发送到我的Facebook帐户,我尝试了很多操作,但是无法理解为什么它给我错误,任何人都可以指导我吗?
我的应用程序详细信息
private const string FacebookApiId = "XXXXXX";
private const string FacebookApiSecret = "XXXXXX";
private const string AuthenticationUrlFormat =
"https://graph.facebook.com/oauth/access_token?client_id={0}&client_secret={1}&grant_type=client_credentials&scope=manage_pages,offline_access,publish_stream
我的控制器
public ActionResult Index()
{
string accessToken = GetAccessToken(FacebookApiId,FacebookApiSecret);
PostMessage(accessToken,"My message");
return View();
}
我的Api详细信息
static void PostMessage(string accessToken,string message)
{
try
{
FacebookClient facebookClient = new FacebookClient(accessToken);
dynamic messagePost = new ExpandoObject();
messagePost.access_token = accessToken;
messagePost.message = message;
var result = facebookClient.Post("/798252384337611/feed",messagePost);
}
catch (FacebookOAuthException ex)
{
string error = ex.Message.ToString();
}
catch (Exception ex)
{
string error1 = ex.Message.ToString();
}
}
static string GetAccessToken(string apiId,string apiSecret)
{
string accessToken = string.Empty;
string url = string.Format(AuthenticationUrlFormat,apiId,apiSecret);
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream,Encoding.UTF8);
String responseString = reader.ReadToEnd();
Fbresponse rs = Newtonsoft.Json.JsonConvert.DeserializeObject<Fbresponse>(responseString);
accessToken = rs.access_token;
}
if (accessToken.Trim().Length == 0)
throw new Exception("There is no Access Token");
return accessToken;
}
我的尝试
1 - var result = facebookClient.Post("/me/feed",messagePost);
错误
(OAuthException-#2500)必须使用活动访问令牌来查询有关当前用户的信息。
2 - var result = facebookClient.Post("/rashid.khi.31/feed",messagePost);
错误
(OAuthException-#803)(#803)无法通过用户名查询用户(rashid.khi.31)
作为我在Google的RND,我从https://findmyfbid.in/上的fb用户名获得了fb用户ID
3 - var result = facebookClient.Post("/100055422049992/feed",messagePost);
错误
(OAuthException-#100)(#100)此调用不允许使用全局ID 100055422049992
请帮助我我的代码或其他东西有什么问题,我知道,我发送了错误的user_id,但我不知道从哪里可以获取正确的ID?
解决方法
只是一个简短的注释-您提供的代码非常古老。 offline_access
权限已于多年前被删除。因此,我建议您在如何创建令牌方面做更多的工作。也许您的令牌完全无效。我找到了此链接:https://ermir.net/topic-10/how-to-publish-a-message-to-a-facebook-page-using-a-dotnet-console-application-它显示了如何从FB Debug页面获取永久令牌,然后如何使用它发布到页面(与您的代码类似):
public class FacebookApi
{
private readonly string FB_PAGE_ID;
private readonly string FB_ACCESS_TOKEN;
private const string FB_BASE_ADDRESS = "https://graph.facebook.com/";
public FacebookApi(string pageId,string accessToken)
{
FB_PAGE_ID = pageId;
FB_ACCESS_TOKEN = accessToken;
}
public async Task<string> PublishMessage(string message)
{
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(FB_BASE_ADDRESS);
var parametters = new Dictionary<string,string>
{
{ "access_token",FB_ACCESS_TOKEN },{ "message",message }
};
var encodedContent = new FormUrlEncodedContent(parametters);
var result = await httpClient.PostAsync($"{FB_PAGE_ID}/feed",encodedContent);
var msg = result.EnsureSuccessStatusCode();
return await msg.Content.ReadAsStringAsync();
}
}
}
,因此请先尝试从FB调试页面对令牌进行硬编码,然后查看是否可以发布。然后着手从您的应用程序内部获取短暂的令牌-但这将要求用户能够与Facebook进行通信-才能使您的应用程序与其THEIR页面进行通信。有道理吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。