2

私はDotNetOpenAuthフレームワークを使用しています。これは、データの消費に慣れるのに最適です。

LinkedInとの通信に使用していますが、サイトに情報を投稿/共有するための正しいアプローチを見つけるのに苦労しています。これが私が使用しているリファレンスです-http://developer.linkedin.com/documents/share-api

以下のコードを実行すると、常に以下のエラー応答が返されます。

ダイレクトメッセージの送信中または応答の取得中にエラーが発生しました。リモートサーバーがエラーを返しました:(400)不正な要求。

Oauthv1.0aを使用しています。

これが私のコードです。

        try
        {
            HttpDeliveryMethods resourceHttpMethod = HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest;

            string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><share><comment>83% of employers will use social media to hire: 78% LinkedIn, 55% Facebook, 45% Twitter [SF Biz Times] http://bit.ly/cCpeOD</comment>";
            xml += "<content><title>Survey: Social networks top hiring tool - San Francisco Business Times</title>";
            xml += "<submitted-url>http://sanfrancisco.bizjournals.com/sanfrancisco/stories/2010/06/28/daily34.html</submitted-url>";
            xml += "<submitted-image-url>http://images.bizjournals.com/travel/cityscapes/thumbs/sm_sanfrancisco.jpg</submitted-image-url>";
            xml += "</content><visibility><code>anyone</code></visibility></share>";

            var multiparts = new List<MultipartPostPart>();
            MultipartPostPart part = MultipartPostPart.CreateFormPart("body", xml);
            part.PartHeaders[HttpRequestHeader.ContentType] = "application/xml";
            multiparts.Add(part);

            var resourceEndpoint = new MessageReceivingEndpoint("http://api.linkedin.com/v1/people/~/shares", resourceHttpMethod);
            HttpWebRequest request = consumer.PrepareAuthorizedRequest(resourceEndpoint, accessToken, multiparts);
            request.ServicePoint.Expect100Continue = false;

            IncomingWebResponse response = consumer.Channel.WebRequestHandler.GetResponse(request);
            this.resultsBox.Text = response.GetResponseReader().ReadToEnd();
        }
        catch (Exception ex)
        {

        }

ありがとう

4

1 に答える 1

1

これについて書き戻すのを忘れて、ビンテージのグーグルニュースグループの誰かと話をしました。私は必要な方向性を得ましたが、投稿する前に解決策を確認したかったのです。

私が失敗した大きなことは、リクエストを自分で作成して新しいコンテンツをストリームに書き込むのではなく、リクエストデータを送信する前にマルチパートデータを追加することでした。

私はOAuthとRESTを初めて使用するので、すべての詳細を把握しているわけではありません。LinkedInとTwitterの両方のRESTAPIに対してこのコードを検証したと言えば十分です。

これが新しいコードです。

        try
        {
            Encoding encoder = Encoding.ASCII;
            HttpDeliveryMethods resourceHttpMethod = HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest;

            byte[] bytes = encoder.GetBytes(xd.OuterXml.ToString());

            var resourceEndpoint = new MessageReceivingEndpoint(ResourceURL, resourceHttpMethod);
            HttpWebRequest request = _consumer.PrepareAuthorizedRequest(resourceEndpoint, _manager.AccessToken);
            request.ServicePoint.Expect100Continue = false;

            request.Method = "POST";
            request.ContentLength = bytes.Length;
            request.ContentType = "application/xml";

            using (System.IO.Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
            }

            IncomingWebResponse response = _consumer.Channel.WebRequestHandler.GetResponse(request);

            ret = true;
        }
        catch (Exception ex)
        {
            _Logger.Error(OpenLogger.FormatException(ex));
        }
于 2012-04-29T02:05:45.887 に答える