2012-04-12 77 views
2

我正在使用DotNetOpenAuth框架,该框架非常适合消费数据。如何使用OAuth 1和DotNetOpenAuth将表单数据分段发布到LinkedIn?

我正在使用它来与LinkedIn交谈,并且无法找出将信息发布/共享到网站的正确方法。这里是我使用的参考 - http://developer.linkedin.com/documents/share-api

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

发送直接信息或获取响应时发生错误。 远程服务器返回错误:(400)错误的请求。

我使用的是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) 
     { 

     } 

感谢

回答

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)); 
     } 
相关问题