Android模拟器中运行的应用无法执行到本地主机实例的HTTP发布

问题描述 投票:0回答:1

我无法在Android Emulator中运行的应用程序执行HTTP Post

{StatusCode:400,ReasonPhrase:“错误请求”,版本:1.1,内容:System.Net.Http.HttpConnection + HttpConnectionResponseContent,标头:{伺服器:Microsoft-HTTPAPI / 2.0日期:2019年10月23日,星期三00:58:01GMT连接:关闭转发:host = XXX.XXX.X.XX:XXXXX;proto = https内容类型:text / html;字符集= us-ascii内容长度:374}}

设置:

  • 我正在使用Conveyor by Keyoti生成的IP地址
  • 我在Conveyor by Keyoti要求的模拟器上安装了安全证书
  • 我用System.Web.Http.HttpPost换出了Microsoft.AspNetCore.Mvc.HttpPost属性

仿真器:

  • 成功:HTTP Get
  • 失败:HTTP发布

集成测试:

  • 成功:HTTP发布(使用相同的端点)

代码:

我编写了一个自动测试,调用了相同的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。

UPDATE:

我应用了此Xamarin Android ASP.Net Core WebAPI document的指南。

特别是,我在Android模拟器上安装了另一个安全证书。

然后我就可以在Android模拟器上观察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
}}

有什么建议吗?

xamarin xamarin.android android-emulator asp.net-core-webapi
1个回答
0
投票

好像您有一个.NET Core Api。 .NET Core在Asp.NET中没有System.Web。 HttpPost属性和HttpGet属性应来自已打开的Microsoft.AspNetCore.Mvc命名空间。另外,由于您使用的是ApiController属性,因此只要绑定到模型,绑定模型就可以工作,而不仅仅是json字符串。创建一个您希望json绑定到的模型,并将该类型用于Post上的参数,并删除FromBody属性。另外,如果您这样做,则可能不需要newtonsoft.json。

open Microsoft.AspNetCore.Mvc

[<ApiController>]
[<Route("api/[controller]")>]
type RegisterController () =
    inherit ControllerBase()

    [<HttpPost>]
    member x.Post(thing:TypeOfThing) =
© www.soinside.com 2019 - 2024. All rights reserved.