【问题标题】:Posting/sharing data to LinkedIn向 LinkedIn 发布/共享数据
【发布时间】:2015-02-03 16:10:27
【问题描述】:

我是 Web API 的新手。目前,我正在使用 C# 中的 Web API 方法将数据发布到 LinkedIn。我已经在developers.linkedin.com 中创建了示例应用程序。我能够获取代码和访问令牌。但是在发布数据或获取配置文件数据时,我收到 401-未经授权的访问错误。以前我能够从链接中获取数据,但现在我不能。这是我获得访问令牌后的代码。

我在WebResponse webResponse = request1.GetResponse(); 收到错误消息 在应用程序的 API 使用页面中,我可以看到 POST Share 使用会增加每个 API 调用。我正在向用户请求rw_nus 允许写入他的帐户。 我是在写错误的 URL 还是需要在通话中发送更多信息? 我应该使用什么 URL 来获取用户个人资料。我之前使用的是“https://api.linkedin.com/v1/people/~”这个网址。

是否可以将我的网络应用程序中的图像或视频分享到 LinkedIn?

请帮我解决这个问题。

string linkedinSharesEndPoint = "https://api.linkedin.com/v1/people     /~/shares";

WebRequest request1 = WebRequest.Create(linkedinSharesEndPoint);
request1.Method = "POST";
request1.Headers.Add("x-li-format", "json");
request1.ContentType = "application/json";

using (var stream = new StreamWriter(request1.GetRequestStream()))
        {
          var shareMsg =
                  new
                  {
                      comment = "hello user",
                      content =
                          new
                          {
                              title = "Api post call"

                          },
                      visibility = new { code = "anyone" }

                  };

            string s = shareMsg.ToString();
            string json = new JavaScriptSerializer().Serialize(shareMsg);
            stream.Write(json);
            stream.Flush();
            stream.Close();
        }
 WebResponse webResponse = request1.GetResponse();
 Stream dataStream = webResponse.GetResponseStream();
 var reader1 = new StreamReader(dataStream);
 string response1 = reader1.ReadToEnd();
 return Request.CreateResponse(HttpStatusCode.OK);  

【问题讨论】:

    标签: c# json asp.net-web-api http-post share


    【解决方案1】:

    我已经用php成功了

    首先你的数组应该是这样的

    $data = [
            'content' => ['title' => 'go ahead BD Team', 
                         'description' => '#riseofthetiger',
                         'submittedUrl' => 'http://yourapp.dev', 
                         'submittedImageUrl' => 'http://yourapp.dev/image.jpg'
                       ],
            'comment' => 'Bangladesh vs India',
            'visibility' => ['code' => 'anyone']
    
        ];
    

    你的标题应该是这样的

    $headers = array(
                'Content-Type' => 'application/json',
                'x-li-format' => 'json',
            );
    

    【讨论】:

      【解决方案2】:

      授权网址:https://www.linkedin.com/oauth/v2/authorization/?client_id=""&redirect_uri=""&response_type=code&state=""&scope=w_share

            public String LinkedINAuth(string code, string state)
                  {
                      string authUrl = "https://www.linkedin.com/oauth/v2/accessToken";
      
                      var sign1 = "grant_type=authorization_code&code=" + code + "&redirect_uri=" + redirectUrl + "&client_id=" + apiKey + "&client_secret=" + apiSecret + "&state=" + state;
                      var sign = "grant_type=authorization_code&code=" + HttpUtility.UrlEncode(code) + "&redirect_uri=" + HttpUtility.HtmlEncode(redirectUrl) + "&client_id=" + apiKey + "&client_secret=" + apiSecret + "&state=" + state;
      
                      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                                           | SecurityProtocolType.Tls11
                                                           | SecurityProtocolType.Tls12;
      
                      HttpWebRequest webRequest = System.Net.WebRequest.Create(authUrl + "?" + sign1) as HttpWebRequest;
                      webRequest.Method = "POST";
                      webRequest.Host = "www.linkedin.com";
                      webRequest.ContentType = "application/x-www-form-urlencoded";
      
                      Stream dataStream = webRequest.GetRequestStream();
      
                      String postData = String.Empty;
                      byte[] postArray = Encoding.ASCII.GetBytes(postData);
      
                      dataStream.Write(postArray, 0, postArray.Length);
                      dataStream.Close();
      
                      WebResponse response = webRequest.GetResponse();
                      dataStream = response.GetResponseStream();
      
      
                      StreamReader responseReader = new StreamReader(dataStream);
                      String returnVal = responseReader.ReadToEnd().ToString();
                      responseReader.Close();
                      dataStream.Close();
                      response.Close();
                      var stri = redirectUrl;
                      retval = returnVal.ToString();
                      var objects = JsonConvert.DeserializeObject<Accountdsdsd>(retval);
                      TokenGlobe = objects.access_token;
                      var SentStatus = PostLinkedInNetworkUpdate(TokenGlobe, "Hello API");
                      return TokenGlobe;
      
                  }
        public bool PostLinkedInNetworkUpdate(string accessToken, string title, string submittedUrl = defaultUrl, string submittedImageUrl = defaultImageUrl)
              {
                  var requestUrl = String.Format(linkedinSharesEndPoint, accessToken);
                  var message = new
                  {
                      comment = "Testing out the LinkedIn Share API with JSON",
                      content = new Dictionary<string, string>
          {   { "title", title },
              { "description", description},
              { "submitted-url", submittedUrl },
              {"submitted-image-url" , submittedImageUrl}
          },
                      visibility = new
                      {
                          code = "anyone"
                      }
                  };
      
                  var requestJson = new JavaScriptSerializer().Serialize(message);
      
                  var client = new WebClient();
                  var requestHeaders = new NameValueCollection
      {
      
          {"Content-Type", "application/json" },
                  {"x-li-format", "json" }
      
      };
                  client.Headers.Add(requestHeaders);
                  var responseJson = client.UploadString(requestUrl, "POST", requestJson);
                  var response = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(responseJson);
                  return response.ContainsKey("updateKey");
              }
               public class Accountdsdsd
          {
              public string access_token { get; set; }
              public string expires_in { get; set; }
          }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 2019-03-23
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多