Я пытаюсь реализовать разрешения на основе политик, используя ссылку здесь:
https://msdn.microsoft.com/en-us/magazine/mt826337.aspx
Это новый проект .NetCore2, и я понятия не имею, что означает ошибка. Я попытался добавить .AddTransient или .AddScoped безрезультатно.
Раздел конфигурации запуска
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddAuthorization(options =>
{
options.AddPolicy("AtLeast3Years",
policy => policy
.Requirements
.Add(new ExperienceRequirement(3)));
});
services.AddSession();
services.AddEditor();
services.AddSingleton<IAuthenticationHandler, ExperienceHandler>();
Требование
public class ExperienceRequirement : IAuthorizationRequirement
{
public int Years { get; private set; }
public ExperienceRequirement(int minimumYears)
{
Years = minimumYears;
}
}
Обработчик
public class ExperienceHandler : AuthorizationHandler<ExperienceRequirement>
{
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context,
ExperienceRequirement requirement)
{
context.Succeed(requirement);
return Task.CompletedTask;
}
}
Error
«ConsumerWebCore.Filters.ExperienceHandler» нельзя использовать в качестве параметра типа «TImplementation» в универсальном типе или методе «ServiceCollectionServiceExtensions.AddSingleton (IServiceCollection)». Не существует неявного преобразования ссылок из ConsumerWebCore.Filters.ExperienceHandler в Microsoft.AspNetCore.Authentication.IAuthenticationHandler. ConsumerWebCore