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(查询用户

作为我在谷歌上的RND,我从上的fb用户名中获得了fb用户IDhttps://findmyfbid.in/

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调试页面获得永久令牌,然后如何使用它发布到页面(看起来与您的代码相似(:

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通信,才能让你的应用与他们的页面通信。有道理吗?

最新更新