有没有办法检查调用方法的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,如果您的控制器位于某个区域,则返回该区域的名称.