這是因爲它是爲此示例而構建的自定義類。
這是正確的page you linked:
public class MinimumAgeRequirement : IAuthorizationRequirement
{
public MinimumAgeRequirement(int age)
{
MinimumAge = age;
}
protected int MinimumAge { get; set; }
}
不要忘記過創建您的處理程序:
public class MinimumAgeHandler : AuthorizationHandler<MinimumAgeRequirement>
{
protected override void Handle(AuthorizationContext context, MinimumAgeRequirement requirement)
{
if (!context.User.HasClaim(c => c.Type == ClaimTypes.DateOfBirth &&
c.Issuer == "http://contoso.com"))
{
return;
}
var dateOfBirth = Convert.ToDateTime(context.User.FindFirst(
c => c.Type == ClaimTypes.DateOfBirth && c.Issuer == "http://contoso.com").Value);
int calculatedAge = DateTime.Today.Year - dateOfBirth.Year;
if (dateOfBirth > DateTime.Today.AddYears(-calculatedAge))
{
calculatedAge--;
}
if (calculatedAge >= MinimumAge)
{
context.Succeed(requirement);
}
}
}
你的最終代碼應該是這樣的:
services.AddAuthorization(options =>
{
options.AddPolicy("Over21",
policy => policy.Requirements.Add(new Authorization.MinimumAgeRequirement(21)));
});
services.AddInstance<IAuthorizationHandler>(new Authorization.MinimumAgeHandler());
自定義類和它的處理程序已經存在。對不起,我忘了提前說過。即使如此,我在我的問題上面的更新屏幕截圖中出現錯誤。 'Authorization'類型上的'MinimumAgeHandler'如何可用?我沒有在'Authorization'類型上創建擴展方法。 – user20358
原來'Authorization'是我跟蹤的文檔中的一個命名空間。刪除它並編譯。現在看看其他問題。 – user20358
如果我的回答與您的原始問題相符,請不要忘記標記爲已回答。這將有助於未來用戶解決與您遇到的相同問題。 –