有没有办法检查调用方法的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函数中我可以计算出特定区域(或它来自的命名空间),以便我可以实现一些自定义功能?
答案 0 :(得分:2)
您可以从RouteData.DataTokens
:
httpContext.Request.RequestContext.RouteData.DataTokens["area"]
如果您的控制器不在某个区域,则返回null
,如果您的控制器位于某个区域,则返回该区域的名称。
答案 1 :(得分:0)
我不太熟悉MCV的区域概念,但我从Google搜索中找到了这个链接。也许它可以帮助你。