如何从 .net core 中的 web api 响应读取标头数据?

Tej*_*jas 1 asp.net-core-webapi

我正在从我的客户端项目调用 web api 方法并将值从响应头返回给客户端

    [HttpPost]
    [AllowAnonymous]
    [Route("login")]
    public IActionResult Login(Users user)
    {
        string s = _repository.Users.ValidateUser(user);
        if (s == "success")
        {
            Users u = _repository.Users.FindByUserName(user.UserName);
            int pid = u.PersonId;
            string role = "";
            if (u != null)
            {

                role = _repository.RoleManager.GetRole(u.Id);
            }
            Response.Headers.Add("Role", role);
            return Ok(pid.ToString());
        }

    }
Run Code Online (Sandbox Code Playgroud)

我在下面尝试在客户端应用程序中获取标头值

   [HttpPost]
    public IActionResult Login(Users user)
    {
        string pid = "";
        HttpClient client = service.GetService();
        HttpResponseMessage response = client.PostAsJsonAsync("api/mymethod", user).Result;
            Task<string> tokenResult = response.Content.ReadAsAsync<string>();
            pid = tokenResult.Result.ToString();

            var headers = response.Headers;
            string role = "";
            if (headers.TryGetValues("Role", out IEnumerable<string> headerValues))
            {
                role = headerValues.ToString();
            }

        return RedirectToAction("Profile");
    }
Run Code Online (Sandbox Code Playgroud)

但它返回 "System.String[]" 。

请告诉我从响应头中获取数据的正确方法

Tej*_*jas 5

我找到了解决方案:

            var headers = response.Headers;
            string role = "";
            if (headers.TryGetValues("Role", out IEnumerable<string> headerValues))
            {
                role = headerValues.FirstOrDefault();
            }
Run Code Online (Sandbox Code Playgroud)

不要忘记添加对 System.Linq 的引用。