首页 文章

Facebook C#SDK抛出ArgumentNullException

提问于
浏览
2

我正在努力与facebook图片上传 . 我正在使用Facebook C#SDK 5.4.1从我的Silverligth 5应用程序(在浏览器中)上传图片 .

身份验证正在运行,我获得了具有所需权限的访问令牌 . (我将访问令牌存储在cookie中,因为我不希望我的Silverlight应用程序重新加载 . )

这是我的代码:

void img_LoadingCompleted(object sender, EventArgs e)
    {

        Dispatcher.BeginInvoke(new Action(() => { string fbcode = ReadCookie("FBCode");

        ExtendedImage img = sender as ExtendedImage;
        string myAppId = "MY_APPID";
        string myAppSecret = "MY_SECRET";

        FacebookClient fbclient = new FacebookClient(fbcode);
        fbclient.PostCompleted += new EventHandler<FacebookApiEventArgs>(fbclient_PostCompleted);

        FacebookMediaObject image = new FacebookMediaObject
        {
            ContentType = "image/jpg",
            FileName = "Testpic"
        };
        image.SetValue(img.Pixels);

        IDictionary<string, object> photoDetails = new Dictionary<string, object>
            {
                {"message", "Test"},
                {"source", image}
            };

        fbclient.PostAsync("/me/photos", photoDetails);
        }));
    }

    void fbclient_PostCompleted(object sender, FacebookApiEventArgs e)
    {
        if (e.Cancelled)
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                MessageBox.Show("Cancelled: "+e.Error);
            }));
        }
    }

在FacebookClient的PostCompleted事件中抛出异常 .

{System.ArgumentNullException: Der Wert darf nicht NULL sein.
Parametername: stream
   bei System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean leaveOpen)
   bei System.IO.StreamReader..ctor(Stream stream)
   bei Facebook.FacebookClient.ProcessResponse(HttpHelper httpHelper, Stream responseStream, Type resultType, String& responseStr, Exception& exception, Boolean& cancelled)}

谢谢你的帮助 .

1 回答

  • 2

    我自己想出了问题 .

    如果图像编码错误,则'll get the ArgumentNullException because Facebook simply doesn' t无响应 . 我也试过这个solution(稍微调整一下代码因为Silverlight 5不支持WriteableBitmap.SaveJpeg())而HTTP错误404就是我得到的响应 .

    如果其他人遇到类似的问题(并且像我一样困惑:-))也许我可以帮助解决以下问题(使用Facebook C#SDK 5.4.1和Silverlight 5 In-Browser):

    JpegEncoder JE = new JpegEncoder();
    MemoryStream M = new MemoryStream();
    JE.Encode(Img.ToImage(), M);
    
    Byte[] ImgData = new Byte[M.Length];
    M.Seek(0, SeekOrigin.Begin);
    M.Read(ImgData, 0, (int)M.Length);
    
    FacebookClient fbclient = new FacebookClient(fbcode);
    fbclient.UploadProgressChanged += new EventHandler<FacebookUploadProgressChangedEventArgs>(fbclient_UploadProgressChanged);
    fbclient.PostCompleted += new EventHandler<FacebookApiEventArgs>(fbclient_PostCompleted);
    
    FacebookMediaObject image = new FacebookMediaObject
    {
        ContentType = "image/jpg",
        FileName = "Testpic"
    };
    image.SetValue(ImgData);
    
    IDictionary<string, object> photoDetails = new Dictionary<string, object>
    {
         {"message", "Test"},
         {"source", image}
    };
    
    new Thread(new ParameterizedThreadStart((fbc) => { StartWait(); ((FacebookClient)fbc).PostAsync("me/photos", photoDetails); })).Start(fbclient);
    

    变量Img是WriteableBitmap的位置 . 对于正确的编码我正在使用Imagetools from Codeplex

    注意:您需要有效的access_token才能使其正常工作!

相关问题