【问题标题】:How to get value from Ok(object value) using HttpPost method如何使用 HttpPost 方法从 Ok(对象值)中获取值
【发布时间】:2020-08-10 10:08:44
【问题描述】:

我正在调用登录方法:

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();
        }

【问题讨论】:

    标签: c# rest api asp.net-web-api .net-core


    【解决方案1】:

    您的 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

    postJsonAsync 还会返回一个 Task,因此您需要等待 Task 才能获取 MyResponse 对象。

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2021-05-19
      相关资源
      最近更新 更多