Я не могу выполнить HTTP Post с приложением, запущенным в Эмуляторе Android .
{StatusCode: 400, ReasonPhrase: 'Неверный запрос ', Версия: 1.1, Содержимое: System.Net.Http.HttpConnection + HttpConnectionResponseContent, Заголовки: {Сервер: Microsoft-HTTPAPI / 2.0 Дата: среда, 23 октября 2019 00:58:01 GMT Соединение: закрыть Переадресовано: хост =XXX.XXX.X.XX: ХХХХХ;proto = https Content-Type: text / html;charset = us-ascii
Content-Length: 374}}
Настройка:
- Я использую IP-адрес, сгенерированный Конвейер по Keyoti
- Я установил сертификат безопасности на эмуляторе, необходимый для Конвейер по Keyoti
- Я поменял Microsoft.AspNetCore.Mvc.HttpPostатрибут с System.Web.Http.HttpPost
Эмулятор:
- Успешно: HTTP Get
- Сбой: HTTP Post
Интеграционный тест:
- Успешно: HTTP Post (с использованием той же конечной точки)
Код:
Я написал автоматический тест, который вызывает ту же реализацию HTTP Post. Поскольку я успешно выполнил тот же код на своем ноутбуке с помощью автоматического теста, я не думаю, что проблема заключается в реальном коде:
open Microsoft.AspNetCore.Mvc
open Newtonsoft.Json
[<ApiController>]
[<Route("api/[controller]")>]
type RegisterController () =
inherit ControllerBase()
[<System.Web.Http.HttpPost>]
member x.Post([<FromBody>] json:string) =
...
Резюме:
В заключение я выделил среду для эмулятора Android, а не для своего ноутбука. Следовательно, эмулятор может успешно запустить HTTP Get. Однако он не может выполнить HTTP-публикацию, даже если мое портативное устройство может выполнять оба действия.
ОБНОВЛЕНИЕ:
Я применил руководство из этого Xamarin Android ASP. Net Core WebAPI document .
В частности, я установил еще один сертификат безопасности на эмуляторе Android.
Затем я смог наблюдать HTTP Get на эмуляторе Android.
Тем не менее, я продолжаю получать сообщение об ошибке HTTP Post.
OperationCanceledException
Физическое устройство:
Если я запускаю приложение с физического устройства Android, я наблюдаюследующее:
{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent, Headers:
{
Date: Wed, 23 Oct 2019 13:33:20 GMT
Server: Kestrel
Transfer-Encoding: chunked
Forwarded: host=xxx.xxx.x.xx:xxxxx; proto=https
Content-Type: text/plain
}}
Новое обновление:
Я отключил отладку только для своего кода в реализации сервера и обнаружил следующее исключение:
Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: 'Bad chunk size data.'
Есть предложения?