c# – 如果Controller在某个区域,请确定

有没有办法检查调用方法的Controller是否来自区域内的Controller?

例如,我有一个继承自AuthorizeAttribute的类,例如

public class CustomAuthorize: System.Web.Mvc.AuthorizeAttribute
{
    public CustomAuthorize()
    {            
        ...
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)        
    {                        
        // TODO - Check if the controller is from an Area
    }
}

然后,我有一些控制器动作,用相关的角色(以及一些其他自定义属性)装饰,例如

[CustomAuthorize(Roles ="Administrator")]
[HttpGet]
public virtual ActionResult Index()
{            
  ...
}

在上面的TODO部分中,我想看看Controller是否是我某个区域的控制器之一.我知道我在区域中的控制器将位于ProjectName.Areas.xxx.Controllers命名空间(其中xxx是区域名称),而不是那些将位于ProjectName.Controllers命名空间中的控制器.

是否有某种方式(可能使用反射?),从上面的AuthorizeCore函数中我可以计算出特定区域(或它来自的命名空间),以便我可以实现一些自定义功能?

最佳答案 你可以从
RouteData.DataTokens获得它:

httpContext.Request.RequestContext.RouteData.DataTokens["area"]

如果您的控制器不在某个区域,则返回null,如果您的控制器位于某个区域,则返回该区域的名称.

点赞