【发布时间】:2019-10-23 01:57:54
【问题描述】:
我无法使用在 Android 模拟器中运行的应用执行 HTTP Post。
{StatusCode: 400, ReasonPhrase: 'Bad Request', 版本: 1.1, 内容: System.Net.Http.HttpConnection+HttpConnectionResponseContent,标题: { 服务器:Microsoft-HTTPAPI/2.0 日期:2019 年 10 月 23 日,星期三 00:58:01 GMT 连接:关闭转发:host=XXX.XXX.X.XX:XXXXX; proto=https 内容类型:文本/html; charset=us-ascii
内容长度:374 }}
设置:
- 我使用的是Conveyor by Keyoti生成的IP地址
- 我在模拟器上安装了Conveyor by Keyoti要求的安全证书
- 我用 System.Web.Http.HttpPost 替换了 Microsoft.AspNetCore.Mvc.HttpPost 属性
模拟器:
- 成功:HTTP 获取
- 失败:HTTP 发布
集成测试:
- 成功: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 Post。
更新:
我应用了来自 Xamarin Android ASP.Net Core WebAPI document 的指导。
具体来说,我在 Android 模拟器上安装了另一个安全证书。
然后我能够在 Android Emulator 上观察到 HTTP Get。
但是,我仍然收到 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.'
有什么建议吗?
【问题讨论】:
-
您是否将文件上传到服务器?还是只是简单的内容?
标签: xamarin xamarin.android android-emulator asp.net-core-webapi