【发布时间】:2022-01-05 12:06:15
【问题描述】:
我正在使用我的自定义授权过滤器,因为它在这里 How do you create a custom AuthorizeAttribute in ASP.NET Core? 但在运行时得到这个错误: “InvalidOperationException:找不到适合类型 'papillon.Common.RoleRequirementFilter' 的构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。”。 " 我应该更改我的 startup.cs 中的一些代码吗?!?!
这是我的授权过滤器
public class RoleRequirementFilter : IAuthorizationFilter
{
private readonly string[] _rolesNames;
public RoleRequirementFilter(string[] roleNames)
{
_rolesNames = roleNames;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
if (context.HttpContext.User.IsInRole("Support"))
return;
foreach (var item in _rolesNames)
if (context.HttpContext.User.IsInRole(item))
return;
context.Result = new ForbidResult();
// context.Result = new UnauthorizedResult();
}
}
这是我的 TypeFilterAttribute
public class RoleRequirementAttribute : TypeFilterAttribute
{
public RoleRequirementAttribute(string[] roleNames) : base(typeof(RoleRequirementFilter))
{
Arguments = roleNames;
}
}
这是我的 startup.cs
services.AddControllersWithViews().AddRazorRuntimeCompilation();
// ...
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}").RequireAuthorization();
endpoints.MapRazorPages().RequireAuthorization();
});
这就是我在控制器中使用它的方式
[RoleRequirement(roleNames:new string[]{Roles.Admin1, Roles.Admin2, Roles.Center1})]
【问题讨论】:
标签: c# asp.net-core authentication asp.net-core-mvc authorization