参数Nullexception:字符串引用未设置为字符串的实例.参数名称:S System.Text.Encoding.



我有这种生成令牌的方法:

[HttpPost("login")]
        public async Task<IActionResult> login(UserForLoginDto userForLoginDto)
        {
            var userFromRepo = await _repo.Login(userForLoginDto.Username.ToLower(), userForLoginDto.Password);
            if(userFromRepo == null)
               return Unauthorized();
            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
                new Claim(ClaimTypes.Name, userFromRepo.Username)
            };   
            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(claims),
                Expires = DateTime.Now.AddDays(1),
                SigningCredentials = creds
            };
            var tokenHandler = new JwtSecurityTokenHandler();
            var token = tokenHandler.CreateToken(tokenDescriptor);
            return Ok(new{
                token = tokenHandler.WriteToken(token)
            });
        }

当我通过Postman调用此API时:

localhost:5000/api/auth/login

在身体用户名中:"约翰",密码:"密码"

我有一个错误:

处理请求时发生了一个未经治疗的例外。 参数Nullexception:字符串引用未设置为一个实例 细绳。参数名称:S System.Text.Encoding.getBytes(String s(

因为有这样的行:

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Token").Value));

请帮助解决此错误。

对于此错误,_config.GetSection("AppSettings:Token").Value似乎返回null。

对于_config.GetSection("AppSettings:Token"),您需要确保您的appsettings.json包含以下内容:

{
"AppSettings": {
    "Token": "This is Token"
},   
}

我有这个确切的错误,我正在使用VS代码。我通过设置称为" tokenkey"的环境变量来解决此问题。可以使用以下内容在终端设置:

dotnet user-secrets set "TokenKey" "super secret key" -p API/

我的代码下面的代码

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["TokenKey"]));

如果您在生产模式下遇到此错误,则必须在服务器上设置环境变量。

我遇到了同样的错误。我通过在我的启动设置中设置环境变量来解决此问题。只需确保它像下面的示例代码

一样
"environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development",
    "JWT_SECRET": "This is a secret or key for jwt",
    "JWT_ISSUER": "Auth"
  }

我遇到了同样的错误。我通过在我的启动设置中设置环境变量来解决此问题。JSON文件,您可以将其放置在AppSettings.json文件中,只需确保它像下面的示例代码

一样。

{&quot" jwt":{&quot" key":&quot" -jadfgdfgdfgdfgdgdgdewsdg&quot&quot ,,"发行人":" ********。com.tr"},

解决此问题添加新项目 - &gt;选择appsetting.json,然后将其添加到API将AppSetting.development.json中的所有内容复制到AppSetting.json

解决的问题