【发布时间】:2020-09-03 05:00:46
【问题描述】:
感谢您的关注。
我正在尝试制作一个与REST API 通信的Xamarin.Forms 应用程序。
该 API 功能齐全,我已经使用 Postman 和另一个 WPF 项目对其进行了测试。
在尝试使用我的HttpClient 调用简单的GET 方法时,我得到以下HttpResponseMessage
{
StatusCode: 400,
ReasonPhrase: 'Bad Request',
Version: 1.1,
Content: System.Net.Http.StreamContent,
Headers:
{
Server: Microsoft-HTTPAPI/2.0
Date: Sun, 17 May 2020 12:20:37 GMT
Connection: close
Content-Type: text/html; charset=us-ascii
Content-Length: 334
}
}
public async Task TurnLEDOn()
{
HttpClient Client = new HttpClient(new System.Net.Http.HttpClientHandler());
Client.DefaultRequestHeaders.Accept.Clear();
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/Json"));
Client.BaseAddress = new Uri("https://192.168.1.2:44341/");
HttpResponseMessage response = await Client.GetAsync("api/ChipCore/TurnLEDOn");
if (response.IsSuccessStatusCode)
{
string receivedPerson = await response.Content.ReadAsAsync<string>();
}
}
同样的代码由 WPF 程序运行并且可以完美运行。
我的手机和笔记本电脑都连接到同一个 Wi-Fi 网络。
- 我已经允许端口
44341通过防火墙,我什至尝试过运行 防火墙关闭的整个事情。手机浏览器打不开 访问 API。 (错误请求) - 我尝试将服务器 url 从
https更改为http但面临trust anchor for certification path not found我已将这些权限添加到android.manifest:
CHANGE_NETWORK_STATE
CHANGE_WIFI_STATE
ACCESS_NETWORK_STATE
INTERNET
API 中的方法
[RoutePrefix("api/ChipCore")]
public class ValuesController : ApiController
{
[HttpGet]
[Route("TurnLEDOn")]
public bool TurnLEDOn()
{
return Switch.TurnLEDOn();
}
}
更新
-
我尝试通过将此行添加到
MainActivity.cs来绕过证书ServicePointManager.ServerCertificateValidationCallback += (o, cert, chain, errors) => true; 我已经厌倦了在手机浏览器中输入网址,我得到
Error 400 - Bad Request
【问题讨论】:
-
如果你只是通过手机浏览
https://192.168.1.2:44341/api/ChipCore/TurnLEDOn会发生什么? -
您可以使用此链接中描述的方法绕过证书错误。我相信您需要正确配置 https 以使其与 https 一起使用:forums.xamarin.com/discussion/91782/… 检查以下链接以了解如何在 .Net Core 上配置 https:docs.microsoft.com/en-us/aspnet/core/security/authentication/…
-
你能回答@FrankNielsen 提出的问题吗?
-
“我已经厌倦了在手机浏览器中输入 URL,我收到错误 400 - 错误请求”是问题本身@TarunLalwani
-
这个网站是关于编码问题的。您的问题不属于这种类型,而是您的手机无法连接到某个本地服务器。这个问题应该被关闭,但它有一个赏金所以它似乎不可能。
标签: c# api rest xamarin.forms