如何获得当前执行区域?

6 asp.net-mvc

我有一个由[Project]控制器使用的类.控制器和不同区域的控制器.我怎样才能确定控制器的位置?(我想我可以查看HttpContext.Current.Request的属性 - 但我正在寻找一种"正确的"MVC方式).谢谢.

那是:

[Project].Helpers // called by:
[Project].Controllers
[Project].Areas.[Area].Controllers
// how could I determine the caller from [Project].Helpers?
Run Code Online (Sandbox Code Playgroud)

Lev*_*evi 16

我们故意没有公开从MVC请求获取当前区域名称的方法,因为"area"只是路由的属性.它对其他用途不可靠.特别是,如果您希望控制器具有某些属性(可以考虑抽象术语,而不是System.Attribute类),这些属性可以由助手使用,那么这些属性必须在控制器本身找到,而不是在区域上.

作为一个实际示例,如果您希望某些逻辑(如操作过滤器)在特定区域中的任何控制器之前运行,则必须直接将操作过滤器与这些控制器相关联.最简单的方法是将一些MyAreaBaseController与该过滤器相关联,然后让逻辑上想要与该区域关联的每个控制器都为该类型的子类化.任何其他用法,例如查看RouteData.DataTokens ["area"]做出决定的全局过滤器,都是不受支持的,并且可能存在危险.

如果您确实需要获取当前区域名称,则可以使用RouteData.DataTokens["area"]它来查找它.