繁体   English   中英

如何在 ASP.NET Core MVC 中获取令牌的值

[英]How to fetch the value of token in ASP.NET Core MVC

我正在 ASP.NET Core MVC 和 API 中创建登录页面。 我获取数据

{
    "UserId": 4,
    "userName": "admin",
    "EmailId": "admin@gmail.com",
    "Password": "123",
    "Role": "admin",
    "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjQiLCJyb2xlIjoiYWRtaW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3ZlcnNpb24iOiJWMy4xIiwibmJmIjoxNjUzODA2NTE4LCJleHAiOjE2NTM5NzkzMTgsImlhdCI6MTY1MzgwNjUxOH0.ogp1MHNrKPvX7P2-nqbHJewOlgS0sSUNcKwADhOeIFc",
    "Mobile": null,
    "Address": null,    
    "created_at": "0001-01-01T00:00:00",
    "updated_at": "0001-01-01T00:00:00"
}

 [HttpPost]
public ActionResult Index(Login model)
{           
    HttpResponseMessage response = GlobalVariables.WebApiClient.PostAsJsonAsync("Users", model).Result;

    IEnumerable<Login> error = null;
 
    if (response.IsSuccessStatusCode)
    {
        string data = response.Content.ReadAsStringAsync( ).Result;
                       
       // Session["TokenNumber"] = data;
     
    }
    else 
    {
     
        error = Enumerable.Empty<Login>();

        ModelState.AddModelError(string.Empty, "Server error. Please contact administrator.");
    }

    return View(model);
}

它显示所有数据。 但我只需要从该数据中获取Token值 - 而不是所有值。

如何只读取令牌? 它应该存储在会话中。

在 C# 中使用 JSON 的一个好方法是使用JSON.NET

如何使用它的一个例子:

public class Response
{
    public Response(string rawResponse)
    {
        var obj = JObject.Parse(rawResponse);
        UserId = int.Parse(obj["UserId"].ToString());

        userName = obj["userName"].ToString();
        //...
        Token = obj["Token"].ToString();
        //...
        
    }
    public int UserId { get; set; }
    public string userName { get; set; }

    public string EmailId { get; set; }

    public String Password { get; set; }

    public string Role { get; set; }

    public string Token { get; set; }

    // other properties

}


// Use
private void Run()
{
  string data = response.Content.ReadAsStringAsync().Result;

  Response response = new Response(data );

  Console.WriteLine("Token: " + response.Token);

 }

这取决于您的身份验证,您使用的是 JWT 吗? 为什么您不在标头属性中发送令牌?

如果您将此数据发布到 Index 方法,则该令牌应存在于 model.Token 中,

使用最佳实践,您需要使用登录方法来验证用户,然后为用户返回一个令牌,以便在每个请求的标头中使用,并使用 AuthorizeAttribute 您应该授权用户

如果您使用的是 .NET Core 和令牌身份验证,请使用

var _bearer_token = Request.Headers[HeaderNames.Authorization].ToString()

原答案: https ://stackoverflow.com/a/61395803/3559462

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM