无法对类型为'IConfiguration'的表达式应用索引[]

4
我可以帮您进行翻译。以下是需要翻译的内容:

我需要使用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 活动的

在这一行中显示了错误:var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));


2
构建一个模型来保存所需的数据,并在启动时从加载的 IConfiguration 中绑定它。在需要的地方注入该模型。 - Nkosi
1
@Nkosi的建议在这里是更好的方法,但你展示的应该也可以工作。例如,你使用的IConfiguration类型是否来自不同的命名空间? - Kirk Larkin
2
@KirkLarkin 是正确的。假设 IConfiguration 是来自 Microsoft.Extensions.ConfigurationIConfiguration,那么你的代码没有问题。错误的唯一合理解释是,在你的代码库中有另一个不是字典类型的 IConfiguration 对象。 - Chris Pratt
1
我也遇到过这种情况。我当时使用的是AutoMapper.Configuration,而不是Microsoft.Extensions.Configuration。 - mattferderer
2个回答

9
我将在命名空间中添加此使用方式,并通过以下方法解决问题:
using IConfiguration = Microsoft.Extensions.Configuration.IConfiguration;

5

添加 using Microsoft.Extensions.Configuration


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接