这是我的代码:
[HttpGet, Authorize(Roles = "Admin")]
public ActionResult ActivityLog()
{
'code to do stuff
return View(model);
}
这很简单 - 如果您是“管理员”角色,您可以执行此操作。但是,我有一个自定义 ActionFilter,它用所有自定义声明填充我的 IPrinciple(我不能使用 ADFS 发送声明,因为我有一个用于多个站点的 ADFS,所以我的声明必须针对该特定站点)。
public class CustomFilter: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
'go get custom claims
}
}
}
我将自定义过滤器从 Global.asax 文件绑定到应用程序
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomFilter());
}
问题是因为 Authorize 属性在我的自定义过滤器之前运行,所以我没有“管理员”角色并且我收到 401 - Unauthorized Access 错误。我如何仍然保留过滤器并在 Authorize 属性中使用“角色”标签?