I'm using my custom authorization filter as it's here How do you create a custom AuthorizeAttribute in ASP.NET Core? but in run time get this error: "InvalidOperationException: A suitable constructor for type 'papillon.Common.RoleRequirementFilter' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.'. " Should I change some code in my startup.cs ?!?!
this is my AuthorizationFilter
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();
}
}
this is my TypeFilterAttribute
public class RoleRequirementAttribute : TypeFilterAttribute
{
public RoleRequirementAttribute(string[] roleNames) : base(typeof(RoleRequirementFilter))
{
Arguments = roleNames;
}
}
this is my 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();
});
and this is how I use it in my controller
[RoleRequirement(roleNames:new string[]{Roles.Admin1, Roles.Admin2, Roles.Center1})]