Вызов API LinkedIn с использованием C # - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь реализовать код на C #, который отправляет сообщения в ленту LinkedIn, и я уже сделал это с помощью Postman, и он работал нормально после генерации токена, действительного в течение 60 дней.Проблема в том, что у меня возникают проблемы при запуске кода с использованием C # и когда он попадает в эту строку:

var httpResponse = await client.PostAsync(builder.Uri, httpContent);

он зависает и продолжает работать вечно, так что я ждал 25 минут.и это не сработало вообще.

Вот как я это сделал в Почтальоне:

Заголовок Заголовок

Тело тело

Вот как я это сделал в C #:

public async Task<bool> Post(ObjectToBind post)
    {

        string Body = "";
        try
        {

            using (StreamReader reader = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"\SocialMediaModels\Provider\PostLinkedInTemplate.json"))
            {
                Body = reader.ReadToEnd();
            }

            Body = Body.Replace("[person_id]", Settings.PersonId).Replace("[text_value]", Settings.ShareCommentary).Replace("[description_value]", Settings.Description).Replace("[url_value]", Settings.OriginalUrl).Replace("[title_value]", Settings.Title);

            using (var client = new HttpClient { Timeout = TimeSpan.FromSeconds(30) })
            {
                client.DefaultRequestHeaders.Add("Authorization", $"Bearer {Settings.Token}");
                client.DefaultRequestHeaders.Add("X-Restli-Protocol-Version", "2.0.0");


                var builder = new UriBuilder(new Uri("https://api.linkedin.com/v2/ugcPosts"));

                var httpContent = new StringContent(Body, Encoding.UTF8, "application/json");
                var httpResponse = await client.PostAsync(builder.Uri, httpContent);

            }

        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
            return false;
        }
        return true;

    }

Примечание : я дважды проверилТело и заголовок params.и все они такие же, как почтальон, и он никогда не попадает в блок catch, а также я добавил точку останова внутри этого блока и, как я писал, когда он попадает в эту строку, он застревает там.

================ ОБНОВЛЕНИЕ ====================

Здесь я вызываю метод из:

 public static async Task<List<PostResult>> ProcessPosts(List<ObjectToBind> objects)
    {
        ISocialProvider socialProvider = null;
        List<PostResult> postResults = null;
        string Message = "";
        bool result;
        try
        {               
            if (objects != null)
            {
                var postRes = new PostResult();
                foreach (var post in objects)
                {
                    postRes.language = post.Language;

                    if (post.DatePostedToLinkedIn == null && post.PostToLinkedIn)
                    {
                        socialProvider = new LinkedIn();
                        // HERE IT IS
                        result = await socialProvider.Post(post);

                        postRes.SuccessfyllyPostedToLinkedIn = result;
                        postRes.PostedToLinkedInOn = result ? DateTime.Now : DateTime.MinValue;
                        postRes.LinkedInMessage = Message;

                    }
                }
            }

            return postResults;
        }
        catch (Exception ex)
        {       
            MessageBox.Show(ex.Message);         
            return postResults;
        }
    }
...