/// <summary> /// Share data to LinkedIn. /// </summary> /// <typeparam name="T">Schema of data to share.</typeparam> /// <typeparam name="U">Type of response object.</typeparam> /// <param name="dataToShare">Share request content.</param> /// <returns>Boolean indicating success or failure.</returns> public async Task <U> ShareDataAsync <T, U>(T dataToShare) { var shareRequest = dataToShare as LinkedInShareRequest; if (shareRequest != null) { LinkedInVisibility.ParseVisibilityStringToEnum(shareRequest.Visibility.Code); var requestParser = new LinkedInParser <LinkedInShareRequest>(); var url = $"{_baseUrl}/people/~/shares?oauth2_access_token={Tokens.AccessToken}&format=json"; using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, new Uri(url))) { request.Headers.Add("x-li-format", "json"); var stringContent = requestParser.Parse(shareRequest); request.Content = new StringContent(stringContent, Encoding.UTF8, "application/json"); using (var response = await client.SendAsync(request).ConfigureAwait(false)) { var data = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var responseParser = new LinkedInParser <U>(); var listResults = responseParser.Parse(data) as List <U>; return(listResults[0]); } } } return(default(U)); }
/// <summary> /// Wrapper around REST API for making data request. /// </summary> /// <typeparam name="TSchema">Schema to use</typeparam> /// <param name="config">Query configuration.</param> /// <param name="maxRecords">Upper limit for records returned.</param> /// <param name="startRecord">Index of paged results.</param> /// <param name="fields">A comma separated string of required fields, which will have strongly typed representation in the model passed in.</param> /// <returns>Strongly typed list of results.</returns> public async Task <IEnumerable <TSchema> > GetDataAsync <TSchema>(LinkedInDataConfig config, int maxRecords, int startRecord = 0, string fields = "id") { var parser = new LinkedInParser <TSchema>(); var url = $"{_baseUrl}{config.Query}/~:({fields})?oauth2_access_token={Tokens.AccessToken}&format=json&count={maxRecords}&start={startRecord}"; using HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url)); request.Headers.Connection.TryParseAdd("Keep-Alive"); using var response = await client.SendAsync(request).ConfigureAwait(false); var data = await response.Content.ReadAsStringAsync().ConfigureAwait(false); if (response.IsSuccessStatusCode && !string.IsNullOrEmpty(data)) { return(parser.Parse(data)); } throw new RequestFailedException((System.Net.HttpStatusCode)response.StatusCode, data); }