Asp.net mvc 4 MVC4中Authorize属性上的自定义角色
这是我的密码:Asp.net mvc 4 MVC4中Authorize属性上的自定义角色,asp.net-mvc-4,action-filter,Asp.net Mvc 4,Action Filter,这是我的密码: [HttpGet, Authorize(Roles = "Admin")] public ActionResult ActivityLog() { 'code to do stuff return View(model); } 这很简单-如果你是“管理员”的角色,你可以进入这个行动。但是,我有一个自定义ActionFilter,它用所有自定义声明填充我的IPrinciple(我不能使用ADF发送声明,因为我有一个用于多个站点的ADF,所以我的声明必须用于该特定站点)
[HttpGet, Authorize(Roles = "Admin")]
public ActionResult ActivityLog()
{
'code to do stuff
return View(model);
}
这很简单-如果你是“管理员”的角色,你可以进入这个行动。但是,我有一个自定义ActionFilter,它用所有自定义声明填充我的IPrinciple(我不能使用ADF发送声明,因为我有一个用于多个站点的ADF,所以我的声明必须用于该特定站点)
我将自定义过滤器从Global.asax文件绑定到应用程序中
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomFilter());
}
问题是因为Authorize属性在我的自定义筛选器之前运行,所以我没有
“管理员”角色,我得到一个401-未经授权的访问错误。如何保留筛选器并在授权属性中使用“角色”标记?关于
“问题是因为Authorize属性在自定义之前运行
筛选器我没有“管理员”角色
您可以创建另一个Authorize属性,该属性首先访问声明,然后创建设置管理员的标准授权
执行此操作的方法是注册并指定Order属性
filters.Add(new AuthorizeAttribute(), 1);
filters.Add(new CustomAuthorizeAttribute(), 2);
有关详细信息,请参阅
“问题是因为Authorize属性在自定义之前运行
筛选器我没有“管理员”角色
您可以创建另一个Authorize属性,该属性首先访问声明,然后创建设置管理员的标准授权
执行此操作的方法是注册并指定Order属性
filters.Add(new AuthorizeAttribute(), 1);
filters.Add(new CustomAuthorizeAttribute(), 2);
有关MVC4中不再支持Authorization属性的详细信息,请参见。现在应该使用新的AllowAnonymous属性 ASP.NET MVC 4包含了新的AllowAnonymous属性,您不再需要编写该代码。在global.asax中全局设置authorized属性,然后将方法列入白名单(即,使用AllowAnonymous属性显式地修饰方法),您要选择退出授权的方法被认为是保护操作方法的最佳做法 如果试图使用操作筛选器并重写AuthorizeCore,则会出现编译时错误“没有合适的重写方法” 以下是在MVC 4中执行属性授权的另一种方法:
public class AuthAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
HandleUnauthorizedRequest(actionContext);
}
protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var response = actionContext.Request.CreateResponse(System.Net.HttpStatusCode.Redirect);
response.Headers.Add("Location", "http://www.google.com");
actionContext.Response = response;
}
}
MVC 4中不再支持AuthorizeAttribute。现在应该使用新的AllowAnonymous属性 ASP.NET MVC 4包含了新的AllowAnonymous属性,您不再需要编写该代码。在global.asax中全局设置authorized属性,然后将方法列入白名单(即,使用AllowAnonymous属性显式地修饰方法),您要选择退出授权的方法被认为是保护操作方法的最佳做法 如果试图使用操作筛选器并重写AuthorizeCore,则会出现编译时错误“没有合适的重写方法” 以下是在MVC 4中执行属性授权的另一种方法:
public class AuthAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
HandleUnauthorizedRequest(actionContext);
}
protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var response = actionContext.Request.CreateResponse(System.Net.HttpStatusCode.Redirect);
response.Headers.Add("Location", "http://www.google.com");
actionContext.Response = response;
}
}