我使用自定义AuthorizationFilter如下:
public class ActionAuthorizeAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) { if(!httpContext.User.Identity.IsAuthenticated) return false; if(IsUserExcluded()) return false; else return IsRoleAuthorize(httpContext); } }
我使用这个过滤器在我拥有的每个动作的顶部,并为检查是授权,需要动作名称,控制器名称和区域名称。所以有什么办法得到这个名称在AuthorizeCore()方法,如使用System.Web.HttpContextBase?如果回答是否,那么如何获得这个名称并将其传递给属性,显然我不想手动添加每个名称,实际上是在控制器中的likeViewContext.RouteData.Values [“控制器”
[ActionAuthorize(actionName=Action,controller=ControllerName,area=AreaName)] public ActionResult Index() { return View(); }
有人有什么想法吗?
解决方法
您可以从RouteData中获取它们:
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) { var rd = httpContext.Request.RequestContext.RouteData; string currentAction = rd.GetrequiredString("action"); string currentController = rd.GetrequiredString("controller"); string currentArea = rd.Values["area"] as string; ... }