HttpClient PostAsync System.Net.Http.HttpRequestException: при отправке запроса произошла ошибка

Я работаю над простой консольной программой, которая использует веб-сервис (http). Будет публиковать строки json из txt файла.

Протестировал приведенный ниже фрагмент на своем собственном API, который работал нормально.

Использовал почтальон для отправки запроса в API и получил ответ.

static void Main(string[] args)
{
    //System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
    HttpClient client = new HttpClient(); //should be instatiated once per application

    do
    {
        try
        {
            Console.WriteLine("Enter Method:");
            string Method = Console.ReadLine();

            Console.WriteLine("Enter URI:");
            string uri = Console.ReadLine();

            if (("POST,PUT").Split(',').Contains(Method.ToUpper()))
            {
                Console.WriteLine("Enter FilePath:");

                string FilePath = Console.ReadLine();
                iLog.Log(iLog.EVENT, string.Format(" {0} | {1}", "File Path : <", FilePath + ">"));

                string str_content = (File.OpenText(@FilePath)).ReadToEnd();
                iLog.Log(iLog.EVENT, string.Format(" {0} | {1}", "String data : <", str_content + ">"));

                //StringContent class creates a formatted text appropriate for the http server/client communication
                StringContent httpContent = new StringContent(str_content, System.Text.Encoding.UTF8, "application/json");
                iLog.Log(iLog.EVENT, string.Format("1")); //trace

                try
                {
                    //Some risky client call that will call parallell code / async /TPL or in some way cause an AggregateException 
                    var postTask = client.PostAsync(uri, httpContent);
                    iLog.Log(iLog.EVENT, string.Format("2")); //trace

                    postTask.Wait();
                    iLog.Log(iLog.EVENT, string.Format("3")); //trace

                    //gets the response back from the API service
                    HttpResponseMessage result = postTask.Result;
                    iLog.Log(iLog.EVENT, string.Format("4")); //trace

                    if (result.IsSuccessStatusCode)
                    {
                        iLog.Log(iLog.EVENT, string.Format("5")); //trace

                        //use this if you want a raw json string
                        var readTask = result.Content.ReadAsStringAsync();
                        iLog.Log(iLog.EVENT, string.Format("6")); //trace

                        readTask.Wait();
                        iLog.Log(iLog.EVENT, string.Format("7")); //trace

                        var str_Response = readTask.Result.ToString();
                        iLog.Log(iLog.EVENT, string.Format("8")); //trace
                        
                        Console.WriteLine("WebService Response : \n<" + str_Response + ">");
                        iLog.Log(iLog.EVENT, string.Format(" {0} | {1}", "WebService Response : <", str_Response + ">"));
                    }
                    else
                    {
                        Console.WriteLine("Status Code = " + result.StatusCode);
                        iLog.Log(iLog.EVENT, string.Format(" {0} | {1}", "StatusCode", result.StatusCode));
                        iLog.Log(iLog.EVENT, string.Format("9")); //trace
                    }

                }
                catch (AggregateException err)
                {
                    foreach (var errInner in err.InnerExceptions)
                    {
                        iLog.Log(iLog.ERROR, string.Format(errInner.ToString())); //trace                                
                    }
                }

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
            iLog.Log(iLog.EVENT, string.Format("{0} | {1}", "Exception", ex.Message.ToString()));
            iLog.Log(iLog.EVENT, string.Format("10")); //trace
        }
        iLog.Log(iLog.EVENT, string.Format("{0} {1}", "END", "----------------------------" + "\n"));
        Console.WriteLine("Do you want to continue?");
    } while (Console.ReadLine().ToUpper() == "Y");

}

Вернулся

System.Net.Http.HttpRequestException: при отправке запроса произошла ошибка. ---> System.Net.WebException: базовое соединение было закрыто: соединение было неожиданно закрыто. в System.Net.HttpWebRequest.EndGetRequestStream (IAsyncResult asyncResult, TransportContext и контекст) в System.Net.Http.HttpClientHandler.GetRequestStreamCallback (IAsyncResult) --- Конец внутренней трассировки стека исключений ---

С Postman вы используете POST или PUT?

ProgrammingLlama 20.12.2020 14:18

использовал пост

Glen Chia 20.12.2020 14:20

Я не знаю, этот комментарий груб или нет. Но, пожалуйста, взгляните на соглашение об именах для c# Learn.Microsoft.com/en-us/dotnet/csharp/programming-guide/… Это показывает, как вы уважаете зрителя

Thiện Sinh 20.12.2020 14:21

заметил исправлю, еще совсем новый.

Glen Chia 20.12.2020 14:23

На самом деле вы также можете изменить подпись метода Main на public static async Task Main(string[] args), чтобы иметь возможность использовать async/await вместо .Wait/.Result.

sunero4 20.12.2020 14:25

Вы можете использовать Postman для создания рабочего кода C# для вызова вашего сервиса, см. документацию

Caius Jard 20.12.2020 14:36

Конечно, сейчас попробую.

Glen Chia 20.12.2020 14:43

Код вроде в порядке. Какой http протокол сервера? HTTP или HTTPS?

Thiện Sinh 20.12.2020 14:54

протокол сервера - Http. Кстати, спасибо за советы, в следующий раз правильно назову соглашение. :)

Glen Chia 20.12.2020 14:55

Привет смог заставить его работать, воспользовавшись предложением Кайуса Джарда по добавлению restsharp nuget и замене кодом, сгенерированным Postman. Тем не менее любопытно, почему приведенный выше код не работает.

Glen Chia 20.12.2020 15:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
803
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привет смог заставить его работать, воспользовавшись предложением Кайуса Джарда по добавлению restsharp nuget и замене кодом, сгенерированным Postman.

Другие вопросы по теме