Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用c#sdk在facebook上发布照片_Facebook_Url_Facebook Graph Api_Post_Photo - Fatal编程技术网

不使用c#sdk在facebook上发布照片

不使用c#sdk在facebook上发布照片,facebook,url,facebook-graph-api,post,photo,Facebook,Url,Facebook Graph Api,Post,Photo,请提供一段简单的c#代码,以便在facebook上发布照片,而无需使用非常著名的facebook sdk for c#,据我所知,发布照片有两种方法 方法1: 下面的fb文档显示了使用提供的url发布图像的方法 当然我试过了,它似乎不接受我的图像url,当我试着在facebook API explorer上使用post方法调试时,输入了如下参数 SomeAlbumID/photos?=access\u token=MyTOKEN&url=http%3a%2f%2fcutree.com%2fcu

请提供一段简单的c#代码,以便在facebook上发布照片,而无需使用非常著名的facebook sdk for c#,据我所知,发布照片有两种方法

方法1:

下面的fb文档显示了使用提供的url发布图像的方法

当然我试过了,它似乎不接受我的图像url,当我试着在facebook API explorer上使用post方法调试时,输入了如下参数

SomeAlbumID/photos?=access\u token=MyTOKEN&url=http%3a%2f%2fcutree.com%2fcutreefbapp%2fimg1.bmp&message=Family+Tree

它返回一个异常,表示

{
  "error": {
    "message": "http\u00253a\u00252f\u00252fcutree.com\u00252fcutreefbapp\u00252fimg1.bmp is an internal url, but this is an external request.", 
    "type": "CurlUrlInvalidException"
  }
}
“内部url,但这是一个外部请求。”我不确定这意味着什么,因为我使用的域与在fbapp上注册的域相同,并且也从服务器本身发出请求

我读过一些关于fb只从几个服务器接收图像的文章,有人能帮我吗

方法2:

这是一种将以字节为单位的图像数据附加到Post正文的方法,fb说“要发布照片,请发出Post请求,并将照片文件附件作为多部分/表单数据。”

然而,每个人都使用fb sdk for c#来实现这一点,任何人都可以为这个问题提供简单的http post方法

我尝试过使用下面的方法来流式传输图像数据

public MyFacebookClass FBPost(string URI, string Parameters)
{
    System.Net.WebRequest req = System.Net.WebRequest.Create("https://graph.facebook.com/" + URI);
    req.ContentType = "application/x-www-form-urlencoded";
    req.Method = "POST";
    byte[] bytes = BmpToBytes_Serialization(new Bitmap("C:\\Users\\atul\\cutreefbapp\\DefaultThumb.bmp"));
    req.ContentLength = bytes.Length;
    System.IO.Stream os = req.GetRequestStream();
    os.Write(bytes, 0, bytes.Length); 
    os.Close();
    System.Net.WebResponse resp = req.GetResponse();
    if (resp == null) return null;
    System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
    return new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<MyFacebookClass>(sr.ReadToEnd().Trim());

}
公共MyFacebookClass FBPost(字符串URI、字符串参数) { System.Net.WebRequest req=System.Net.WebRequest.Create(“https://graph.facebook.com/“+URI); req.ContentType=“应用程序/x-www-form-urlencoded”; 请求方法=“POST”; byte[]bytes=BmpToBytes\u序列化(新位图(“C:\\Users\\atul\\cutreefbapp\\DefaultThumb.bmp”); req.ContentLength=字节.Length; System.IO.Stream os=req.GetRequestStream(); 写入(字节,0,字节长度); os.Close(); System.Net.WebResponse resp=req.GetResponse(); if(resp==null)返回null; System.IO.StreamReader sr=新的System.IO.StreamReader(resp.GetResponseStream()); 返回新的System.Web.Script.Serialization.JavaScriptSerializer().Deserialize(sr.ReadToEnd().Trim()); }
您的问题是您的代码不正确。为了在Facebook上发布一张照片,你需要使用一个由多个部分组成的数据帖子。我没有使用过C#SDK,但我确信它在提交图像之前在内部构建了一个多部分表单帖子


你将不得不做一些类似的事情。我正准备从我的应用程序中发布我的代码,这正是为Facebook所做的,但有点长。

通过提供参数
url
发布照片肯定有效。如果它不适合你,那你就做错了

(我刚刚在Graph API Explorer上用您的图片的URL进行了尝试,它的工作方式与我预期的一样。)

当我尝试使用post方法在FacebookAPI浏览器上调试并输入如下参数时

SomeAlbumID/photos?=access\u token=MyTOKEN&url=http%3a%2f%2fcutree.com%2fcutreefbapp%2fimg1.bmp&message=Family+Tree


如果这是您试图发送到的实际地址,那么
照片?
访问令牌
之间的
=
显然是错误的。

谢谢Frazell,我想我已经掌握了窍门,我将发布我完成的代码供其他人参考。我喜欢一切尽可能简化。“为了在Facebook上发布照片,你需要使用一个多部分表单的数据帖子。”——不,你不需要。使用
url
参数而不是
source
,并将可公开访问的图片url作为值也可以使用。@CBroe为什么否决投票?在Facebook的API文档中没有提到url查询字符串参数。FacebookAPI声明了多部分形式,C#SDK也使用了这种形式。这个Url参数是新的吗?