Я пытаюсь создать собственный валидатор.Я не могу получить поставщика услуг из пользовательского контекста.Я пытаюсь получить доступ к своим услугам, но я не могу этого сделать.
Свободная проверка добавлена в мое приложение, как предлагает их веб-сайт.
Сообщение об ошибке:
'Поставщик услуг не настроен для работы с FluentValidation.Использование InjectValidator или GetServiceProvider поддерживается только при использовании автоматической интеграции MVC. '
public static class ValidatorExtensions
{
public static IRuleBuilderInitial<T, string> MustBeRefreshToken<T>(this IRuleBuilder<T, string> ruleBuilder)
{
return ruleBuilder.Custom((token, contextPropertyValidatorContext) =>
{
var context = contextPropertyValidatorContext.GetServiceProvider();
var jwtSettings = (JWTSettings)context.GetService(typeof(JWTSettings));
var meblexDbContext = (MeblexDbContext)context.GetService(typeof(MeblexDbContext));
var tokenValidationParameters = jwtSettings.GetTokenValidationParameters(jwtSettings.RefreshTokenSecret);
var jwtService = (IJWTService)context.GetService(typeof(IJWTService));
try
{
var userId = jwtService.GetRefreshTokenUserId(token);
var userExist = meblexDbContext.Users.FirstOrDefault(x => x.UserId == userId);
if (userExist == null) contextPropertyValidatorContext.AddFailure("{Property Name} not connected with user");
var expTicks = int.Parse(jwtService.GetClaimValue("exp", tokenValidationParameters, token));
var expDate = DateTimeOffset.UnixEpoch.AddSeconds(expTicks);
if (! (expDate > DateTime.UtcNow))
{
contextPropertyValidatorContext.AddFailure("{Property Name} is expired");
}
}
catch
{
contextPropertyValidatorContext.AddFailure("{Property Name} is not valid");
}
});
}
}
}