Как получить значение из Ok (значение объекта) с помощью метода HttpPost - PullRequest
0 голосов
/ 27 апреля 2020

Я вызываю метод входа в систему:

var result = $"{Properties.Settings.Default.APIUrl}/{_route}/login".PostJsonAsync(userToLogin);

Из результата я хочу получить токен var myToken = result;

Это метод входа в API

[HttpPost("login")]
        public async Task<IActionResult> Login(UserToLogin userToLogin)
        {
            var user = await _userManager.FindByNameAsync(userToLogin.Username);
            var result = await _signInManager
                .CheckPasswordSignInAsync(user, userToLogin.Password, false);

            if (result.Succeeded)
            {
                var appUser = await _userManager.Users
                    .FirstOrDefaultAsync(u => u.NormalizedUserName == userToLogin.Username.ToUpper());

                var userToReturn = appUser;

                return Ok(new
                {
                    token = GenerateJwtToken(appUser).Result
                });
            }
            return Unauthorized();
        }

1 Ответ

2 голосов
/ 27 апреля 2020

Ваш API возвращает экземпляр анонимного типа. Таким образом, тело ответа должно выглядеть примерно так:

{
    "Token": "GENERATED TOKEN"
}

Самый простой способ достичь того, что вам нужно, - это иметь класс, который соответствует ответу json. Например:

public class MyResponse 
{
    public string Token {get;set;}
}

и вызовите API, параметризованный с типом

var result = $"{Properties.Settings.Default.APIUrl}/{_route}/login".PostJsonAsync<MyResponse>(userToLogin);

. Это будет сделано: в случае, если ваш API вернется с кодом успеха (200 <= code < 300), он будет десериализовать тело до этого типа. Тогда вы можете использовать result.Token </p>

Также postJsonAsyn c вернет вам задачу, поэтому вам нужно дождаться ее, чтобы получить объект MyResponse.

...