【问题标题】:Work out if Controller is in an Area确定控制器是否在某个区域中
【发布时间】:2017-01-26 13:54:09
【问题描述】:

有没有办法检查调用方法的Controller是否来自Area内的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 部分中,我想查看控制器是否是我的区域之一的控制器之一。我知道我在某个区域中的控制器将位于 ProjectName.Areas.xxx.Controllers 命名空间中(其中 xxx 是区域名称),而不在区域中的控制器将位于 ProjectName.Controllers 命名空间中。

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

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以从RouteData.DataTokens获取它:

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

    如果您的控制器不在某个区域内,则返回 null;如果您的控制器在某个区域内,则返回该区域的名称。

    【讨论】:

    • 没问题@ca8msm - 很高兴我能帮上忙。
    【解决方案2】:

    我对 MCV 的区域概念不太熟悉,但我从 Google 搜索中找到了此链接。也许它可以帮助你。

    ASP.NET MVC - Get Current Area Name in View or Controller

    【讨论】:

    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多