Я перенес веб-API ASP.NET Core 2.2 в .NET 8.0, скопировав код в пустой проект .NET 8.0, и в основном устранил все ошибки сборки, установив необходимые зависимости и т. д. Я получил веб-API для запуск, но попытка войти в интерфейс, подключенный к веб-API, похоже, не работает. Я только что получаю сообщение об ошибке 500 ошибок ответа HTTP.
Я перевел веб-API в режим отладки в VS2022 и пошел шаг за шагом, чтобы увидеть, что происходит не так, и я обнаружил, что сначала из-за При миграции хешированные пароли устарели, поэтому вместо получения PasswordVerificationResult.Success я получал PasswordVerificationResult.SuccessRehashNeeded, и, таким образом, для возвращаемого пользователя было установлено значение null. Я пока не хотел рисковать возиться с базой данных, поэтому временно изменил проверку на PasswordVerificationResult.SuccessRehashNeeded. И логика проверки работает, и кажется, что она движется к действию входа в систему, но затем, после прохождения первоначальной проверки учетных данных, отладка, похоже, переходит к длинной последовательности непонятных для меня шагов.
Это включает в себя переход к различным файлам, таким как Task.cs, ExecutionContext.cs, AsyncTaskMethodBuilderT.cs, TaskAwaiter.cs и т. д. Все это в конечном итоге заканчивается возвратом ошибки 500. Я новичок в .NET и не создавал этот веб-API, поэтому надеюсь получить здесь помощь.
AccountController.cs:
[AllowAnonymous]
[Route("~/api/Token")]
public async Task Token([FromBody] UserModel userParam)
{
UserModel user = await _userService.AuthenticateAsync(userParam.Username, userParam.Password);
if (user == null)
{
return BadRequest(new { message = "Username or password is incorrect" });
}
else if (user.Id != 0)
{
return BadRequest(new { message = "Account is inactive or is expired" });
}
else
{
SessionHistoryModel sessionHist = new SessionHistoryModel();
sessionHist.Action = "Login";
sessionHist.HistTimeStamp = DateTime.Now;
sessionHist.UserId = _sqlProvider.GetUserId(user.Username.ToString());
sessionHist.UserName = user.Username;
sessionHist.Token = user.Token;
int sessionHistStatus = _sqlProvider.SaveConfigurationInstances(sessionHist, "SessionHist");
}
return Ok(user);
}
После завершения выполнения этой части начинается вышеупомянутая серия непонятных шагов.
AuthenthicateAsync():
public async Task AuthenticateAsync(string username, string password)
{
UserModel userModel = new UserModel();
//ApplicationUser user;
var user = await _userManager.FindByNameAsync(username);
// return null if user not found
var check = _userManager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, password);
if (user == null || !check.Equals(PasswordVerificationResult.SuccessRehashNeeded))
{
return null;
}
else if (user.IsActive == false || user.AccountExpiryDate < DateTime.Now)
{
userModel.Id = user.Id;
return userModel;
}
// authentication successful so generate jwt token
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
var claims = new List
{
new Claim(ClaimTypes.Name, user.Id.ToString())
};
// Get User roles and add them to claims
var roles = await _userManager.GetRolesAsync(user);
AddRolesToClaims(claims, roles);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
userModel.Username = username;
userModel.Token = tokenHandler.WriteToken(token);
// remove password before returning
userModel.Password = null;
return userModel;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... nger-works
Веб-API перенесен с .NET Core 2.2 на .NET 8, и вход в систему больше не работает. ⇐ C#
Место общения программистов C#
1727157368
Anonymous
Я перенес веб-API ASP.NET Core 2.2 в .NET 8.0, скопировав код в пустой проект .NET 8.0, и в основном устранил все ошибки сборки, установив необходимые зависимости и т. д. Я получил веб-API для запуск, но попытка войти в интерфейс, подключенный к веб-API, похоже, не работает. Я только что получаю сообщение об ошибке 500 ошибок ответа HTTP.
Я перевел веб-API в режим отладки в VS2022 и пошел шаг за шагом, чтобы увидеть, что происходит не так, и я обнаружил, что сначала из-за При миграции хешированные пароли устарели, поэтому вместо получения PasswordVerificationResult.Success я получал PasswordVerificationResult.SuccessRehashNeeded, и, таким образом, для возвращаемого пользователя было установлено значение null. Я пока не хотел рисковать возиться с базой данных, поэтому временно изменил проверку на PasswordVerificationResult.SuccessRehashNeeded. И логика проверки работает, и кажется, что она движется к действию входа в систему, но затем, после прохождения первоначальной проверки учетных данных, отладка, похоже, переходит к длинной последовательности непонятных для меня шагов.
Это включает в себя переход к различным файлам, таким как Task.cs, ExecutionContext.cs, AsyncTaskMethodBuilderT.cs, TaskAwaiter.cs и т. д. Все это в конечном итоге заканчивается возвратом ошибки 500. Я новичок в .NET и не создавал этот веб-API, поэтому надеюсь получить здесь помощь.
AccountController.cs:
[AllowAnonymous]
[Route("~/api/Token")]
public async Task Token([FromBody] UserModel userParam)
{
UserModel user = await _userService.AuthenticateAsync(userParam.Username, userParam.Password);
if (user == null)
{
return BadRequest(new { message = "Username or password is incorrect" });
}
else if (user.Id != 0)
{
return BadRequest(new { message = "Account is inactive or is expired" });
}
else
{
SessionHistoryModel sessionHist = new SessionHistoryModel();
sessionHist.Action = "Login";
sessionHist.HistTimeStamp = DateTime.Now;
sessionHist.UserId = _sqlProvider.GetUserId(user.Username.ToString());
sessionHist.UserName = user.Username;
sessionHist.Token = user.Token;
int sessionHistStatus = _sqlProvider.SaveConfigurationInstances(sessionHist, "SessionHist");
}
return Ok(user);
}
После завершения выполнения этой части начинается вышеупомянутая серия непонятных шагов.
AuthenthicateAsync():
public async Task AuthenticateAsync(string username, string password)
{
UserModel userModel = new UserModel();
//ApplicationUser user;
var user = await _userManager.FindByNameAsync(username);
// return null if user not found
var check = _userManager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, password);
if (user == null || !check.Equals(PasswordVerificationResult.SuccessRehashNeeded))
{
return null;
}
else if (user.IsActive == false || user.AccountExpiryDate < DateTime.Now)
{
userModel.Id = user.Id;
return userModel;
}
// authentication successful so generate jwt token
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
var claims = new List
{
new Claim(ClaimTypes.Name, user.Id.ToString())
};
// Get User roles and add them to claims
var roles = await _userManager.GetRolesAsync(user);
AddRolesToClaims(claims, roles);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
userModel.Username = username;
userModel.Token = tokenHandler.WriteToken(token);
// remove password before returning
userModel.Password = null;
return userModel;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79016935/migrated-web-api-from-net-core-2-2-to-net-8-and-login-no-longer-works[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия