【发布时间】:2018-10-09 21:08:43
【问题描述】:
我正在尝试从数据库的 ASPNetUsers 表中获取一些自定义列值(经度、纬度),当我发送 Get 请求抛出浏览器时,我得到 200 ok 请求的 json .. 但是当我尝试使用GetStringAsync 反序列化我的 xamarin 应用程序中的响应我没有得到任何响应。
在 AccountController 类中
// POST api/Account/GetUserPostion
[Route("GetUserPostion")]
public LocationDataToPostAsync GetUserPostion()
{
var store = new UserStore<ApplicationUser>(new ApplicationDbContext());
var manager = new ApplicationUserManager(store);
LocationDataToPostAsync locationData = new LocationDataToPostAsync();
var model = manager.FindById(User.Identity.GetUserId());
locationData.UserId = User.Identity.GetUserId();
if (model.Longitude != null) locationData.Longitude = (double) model.Longitude;
if (model.Latitude != null) locationData.Latitude = (double) model.Latitude;
return locationData;
}
在 xamarin 表单应用程序的 ApiService 类中
public async Task<LocationDataToPostAsync> GetUserLocationAsync(string accessToken)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var json = await client.GetStringAsync("http://10.0.2.2:45455/api/Account/GetUserPostion");
var location = JsonConvert.DeserializeObject<LocationDataToPostAsync>(json);
return location;
}
【问题讨论】:
-
您在哪里以及如何拨打
GetUserLocationAsync?是否抛出任何异常或执行只是停止?在后一种情况下,这听起来像是死锁,表明您错误地调用了该方法。 -
在一个名为 MapPageViewModel 的类中 public async Task
GetUserLocation() { var accesstoken = Settings.AccessToken; UserCurrentLocation = 等待 _apiServices.GetUserLocationAsync(accesstoken);返回用户当前位置; } -
执行没有超出getstringasync中的await ..没有抛出异常...可能调用有问题..但至少json var不应该返回某物 ?!因为就像我说的,当我从浏览器调用它时,响应是 200 ok 以及请求的数据?!
-
调用async方法的最顶层,是怎么做的?你是打电话给
.Result还是.GetAwaiter().GetResult()来处理这个任务,或者你在做什么?无论如何,请尝试在await任务的任何地方添加.ConfigureAwait(false),除非您特别需要返回到您来自的上下文。 -
谢谢@Cheesebaron .. 我将 .ConfigureAwait(false) 添加到 await 调用中,现在可以使用了..
标签: json web-services xamarin asp.net-web-api xamarin.forms