gpt4 book ai didi

c# - 如何配置 Visual Studio 2017 android 模拟器以在本地主机上工作

转载 作者:行者123 更新时间:2023-11-30 14:22:08 24 4
gpt4 key购买 nike

我正在使用 Xamarin.forms 来使用 API。为此,我在我的解决方案中添加了一个 Web 项目,并在其 Controller 中使用 API 来操作数据。

首先我将它部署在 Windows 模拟器上,一切正常。

但是当你在 Android 上部署同样的东西时,我得到了各种异常,比如-

System.Net.WebException: Failed to connect to localhost/127.0.0.1:53865

或:

Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.

我已经尝试过一些解决方案,例如授予它互联网权限、使用我的系统的 IP 地址并使用 10.2.2.2,但我无法运行该应用程序。

下面是给 Jsonreader 异常的登录代码-

public async Task<string> LoginAsync(string username, string password)
{
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username",username),
new KeyValuePair<string, string>("password",password),
new KeyValuePair<string, string>("grant_type","password")
};

var request = new HttpRequestMessage(HttpMethod.Post, "http://192.168.0.0:53865/Token");
request.Content = new FormUrlEncodedContent(keyValues);

var client = new HttpClient();
var response = await client.SendAsync(request);
var jwt = await response.Content.ReadAsStringAsync();
var jwtDynamic = new JObject();
jwtDynamic = JsonConvert.DeserializeObject<dynamic>(jwt);

//dynamic jwtDynamic = JsonConvert.DeserializeObject(jwt);

var accessToken = jwtDynamic.Value<string>("access_token");
var accessExpires = jwtDynamic.Value<DateTime>(".expires");
Settings.AccessTokenExpiration = accessExpires;

Debug.WriteLine(jwt);

return accessToken;
}

这是登录 - 它抛出一个 System.Net.Web.Exception :

public async Task<bool> RegisterAsync(string email, string password, string confirmpassword)
{
var client = new HttpClient();

var model = new RegisterBindingModel()
{
Email = email,
Password = password,
ConfirmPassword = confirmpassword
};

var json = JsonConvert.SerializeObject(model);

HttpContent content = new StringContent(json);

content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var response = await client.PostAsync("http://localhost:53865/api/Account/Register", content);

最佳答案

  1. 将您的 API URL 配置为在 127.0.0.1 而不是本地主机上运行:

// .NET Core Web.Api example
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args)
.UseStartup()
.UseUrls(“http://127.0.0.1:5001“)
.Build();

  1. 将您的 Xamarin.Forms API 使用者配置为具有条件 URL 基础:

 string apiUrl = null;
if (Device.RuntimePlatform == Device.Android)
apiUrl = “http://10.0.2.2:5001/api“;
else if (Device.RuntimePlatform == Device.iOS)
apiUrl = “http://localhost:5001/api“;
else
throw new UnsupportedPlatformException();

Android 模拟器的问题是它将 10.0.2.2 映射到 127.0.0.1,而不是本地主机。但是,iOS 模拟器使用主机网络。

应该是吧!

关于c# - 如何配置 Visual Studio 2017 android 模拟器以在本地主机上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com