【发布时间】:2019-05-07 03:21:17
【问题描述】:
我需要使用 jwt 创建登录。当我使用此代码时:
private string BuildToken(User user)
{
var claims = new[] {
new Claim(JwtRegisteredClaimNames.Sub, user.DisplayName),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
new Claim(JwtRegisteredClaimNames.Birthdate, user.BirthDate.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(_config["Jwt:Issuer"],
_config["Jwt:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
它告诉我这个错误:
严重性代码描述项目文件行抑制状态 错误 CS0021 无法使用 [] 将索引应用于“IConfiguration”类型的表达式 StoreFinal C:\Users\Mr-Programer\Desktop\New folder\StoreFinal\StoreFinal\Areas\Admin\Controllers\LoginController.cs 65 Active
在此行显示错误:var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
【问题讨论】:
-
构建一个模型来保存所需的数据,并在启动时从加载的
IConfiguration绑定这些数据。在需要的地方注入模型。 -
@Nkosi 的建议是这里更好的方法,但你所展示的应该可以工作。例如,您在此处使用的
IConfiguration类型是否来自不同的命名空间? -
@KirkLarkin 是正确的。您的代码没有问题,假设
IConfiguration是来自Microsoft.Extensions.Configuration的IConfiguration。该错误的唯一合乎逻辑的解释是代码库中某处有一个不同的IConfiguration对象,它不是字典类型。 -
我遇到过这种情况。我使用的是 AutoMapper.Configuration 而不是 Microsoft.Extensions.Configuration
标签: asp.net-core asp.net-core-2.0 asp.net-core-webapi