Исключение - «Не удается отправить тело содержимого с этим типом глагола» с использованием httpclient.sendasync - PullRequest
0 голосов
/ 27 сентября 2018

Уже пытались найти SO для подобных проблем, но они не помогли решить.

Сценарий:

Иметь приложение веб-клиента, которое имеет приложение веб-API в качестве бэкэнда.Нет проблем при вызове того же URI, если он от этого клиента - веб-API, но исключение происходит, когда я пытаюсь инициировать запрос API из другого приложения служб WebAPI (скажем, это отдельный проект для доступа к отчетам, которые выполняются как службаиспользуя Telerik Reporting).

Код:

 private async Task<HttpStatusCode> AccessService()
        {
            HttpResponseMessage response = null;
            try
            {

                using (HttpRequestMessage request = new HttpRequestMessage()
                {
                    Content = new System.Net.Http.StringContent(JSONValues, System.Text.Encoding.UTF8, "application/json"),
                    RequestUri = new Uri(UriString),
                    Method = CallMethod
                })
                {

                   request.Headers.Authorization =  new AuthenticationHeaderValue("Bearer", Utils.Token) ;

                    response = await httpClient.SendAsync(request);

                    if (response.IsSuccessStatusCode)
                    {
                        string httpResponse = await response.Content.ReadAsStringAsync();

                            httpString = JsonConvert.DeserializeObject<string[]>(httpResponse);
                    }
                    ErrorCode = response.StatusCode;
                    response.Dispose();
                }
            }
            catch (Exception ex)
            {
                    Misc.Error= ex.Message;
            }
            finally
            {
                response.Dispose();
            }

            return ErrorCode;

        }

Исключение:

Не удается отправить тело содержимого с этим типом глагола.

  at System.Net.HttpWebRequest.CheckProtocol(Boolean onRequestStream)
   at System.Net.HttpWebRequest.BeginGetRequestStream(AsyncCallback callback, Object state)
   at System.Net.Http.HttpClientHandler.StartGettingRequestStream(RequestState state)
   at System.Net.Http.HttpClientHandler.PrepareAndStartContentUpload(RequestState state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

Это прекрасно работает, когда я получаю к нему доступ из приложения клиента (asp.net mvc), и возникает проблема, когда я вызываю это из приложения API служб отчетов.Это как-то связано с этим.

Редактировать:

Проект веб-клиента - asp.net mvc core 2.1, поэтому я думаю, что он работает при использовании содержимого в методе GET HttpClient.SendAsync, но в приложении служб отчетов, где возникает эта проблемаявляются целями .net 461.

Я сильно сомневаюсь, что это может быть причиной, поскольку .net framework не допускает содержимое для операций GET?Любая работа вокруг? Ссылка

TIA

1 Ответ

0 голосов
/ 27 сентября 2018

На основании предоставленного описания, если вы используете метод get, у вас обычно нет тела в запросе get.Для получения более подробной информации, пожалуйста, обратитесь к решениям ниже:

/3762584/ne-udaetsya-otpravit-telo-soderzhimogo-s-etim-tipom-glagola

...