【问题标题】:How to multipart post form data to LinkedIn using OAuth 1 and DotNetOpenAuth?如何使用 OAuth 1 和 DotNetOpenAuth 将表单数据多部分发布到 LinkedIn?
【发布时间】:2012-04-12 12:40:48
【问题描述】:

我正在使用 DotNetOpenAuth 框架,该框架非常适合快速处理数据。

我正在使用它与 LinkedIn 交谈,但我无法确定向该网站发布/共享信息的正确方法。这是我正在使用的参考 - http://developer.linkedin.com/documents/share-api

当我执行下面的代码时,我总是得到下面的错误响应;

发送直接消息或获取响应时出错。 远程服务器返回错误:(400) Bad Request。

我正在使用 Oauth v1.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)
        {

        }

谢谢

【问题讨论】:

    标签: dotnetopenauth linkedin


    【解决方案1】:

    忘了回信,与来自老式谷歌新闻组的人交谈,我得到了我需要的方向,但想在发布之前验证解决方案。

    我搞砸的最重要的事情是在发送请求数据之前添加多部分数据,而不是自己构建请求并将新内容写入流。

    我是使用 OAuth 和 REST 的新手,所以我不知道所有细节,我只想说我已经针对 LinkedIn 和 Twitter REST API 验证了这段代码。

    这是新的代码;

            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));
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多