【问题标题】:How to get the physical controller class file path of the executing action method?如何获取执行动作方法的物理控制器类文件路径?
【发布时间】:2010-12-22 00:38:54
【问题描述】:

假设当前执行的动作方法是 Home 控制器中的 Index()。从Index()内部,如何获取Home控制器的物理文件路径?假设我们直到运行时才知道文件结构。

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-mvc-2


【解决方案1】:

物理文件 (Controller\Home.cs) 可能不存在,因为控制器被编译成 .dll,并且按照惯例,存储在 bin 文件夹中。

如果是您想要的 .dll,可能在 bin 文件夹中,或者在控制器中使用 GetExecutingAssembly

您可以使用以下命令找到控制器的名称:

Request.RequestContext.RouteData.Values["controller"];

您可以将 .cs 文件的位置存储在您的 Web.Config 中,这样就足以找到它们。 (注意部分 .cs 文件)。

下一步是找到控制器方法,因为找到一个具有正确名称的方法是不够的。您必须匹配参数和属性(HttpPost / ActionName)。

【讨论】:

  • 我们可以强制 MVC 项目作为 WebForm 网站工作吗?我的意思是,cs 文件仍在站点目录中?
  • 视图 (.cshtml / .aspx) 物理存储在服务器上。控制器已编译(您可以将这些与代码隐藏文件进行比较)。但是在 View 中添加控制器逻辑是错误的。你想做什么?
  • 我的方案是构建一个 mvc 项目,其母版页包含 2 个按钮。一个带有“显示控制器代码”标题的按钮将让访问者知道控制器代码,另一个带有“显示视图代码”标题的按钮将显示视图代码。它看起来像实验站点的 W3C 教程,但我的是只读模式。
  • 感谢您的回答。我认为这个问题永远不会解决,因为控制器的预编译是必须的。
  • 由于控制器可能很大(和部分),向用户展示正确的东西(=方法)将涉及构建您自己的 C# 编译器。
【解决方案2】:

这会有所帮助:Get the Assembly path C#

【讨论】:

  • 谢谢。如果控制器类必须在部署前编译,不像webform站点无需预编译就可以部署,我在这个主题中的问题不再是可解决的。
猜你喜欢
  • 2012-06-04
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
相关资源
最近更新 更多