【发布时间】:2015-03-18 00:04:44
【问题描述】:
目前,我们正在尝试在我们的 API 中实现一个自定义控制器工厂,以根据传入我们 API 的标识符令牌来确定要使用的正确控制器。这个项目的设置方式是每个不同的公司(只有大约 5 个)都有自己的程序集,其中包含自定义控制器,这些控制器具有执行某人尝试执行的任何操作所需的操作方法。我收到的要求之一是这些程序集中的控制器必须命名相同。因此,例如,您可以在一个不同的程序集中拥有四个不同的控制器,每个控制器都命名为CustomerController。这四个控制器都包含名称相同的操作方法,但它们内部的实现完全不同。
在使用我们的自定义控制器工厂时,我们使用反射来拉取并创建一个正确控制器类型的实例,该控制器类型应基于哪个程序集作为目标。我已经对此进行了调试,并确认结果返回了正确的控制器。
发生的问题发生在操作方法调用期间。尽管我们的控制器工厂为我们的请求返回了正确的控制器,但似乎 MVC 可能已经从这些程序集中预加载了每个控制器,并且仍然将这些作为可能的方向。我们在调用 Action Method 时遇到的确切错误是:The current request is ambiguous between the following action methods
有没有办法告诉 MVC 忽略控制器工厂请求中未返回的其他控制器,以便它知道不要尝试查看其他似乎没有加载的控制器?如果 MVC 只是要检查所有其他控制器的动作方法匹配,那么 ControllerFactory 的意义何在?这里一定有我遗漏的东西。
我发现解决此问题的唯一其他解决方案是将 ActionMethodSelector 属性添加到所有涉及的操作方法。但是,考虑到每个单独的 Action Method 都需要在它们之间重复相同的属性,这使得解决方案在向前看时非常脆弱。
当我实现了一个应该决定选择哪个控制器来使用动作方法的自定义控制器工厂时,期待任何关于 MVC 为何会这样行为的建议或知识。提前致谢!
【问题讨论】:
标签: c# asp.net-mvc model-view-controller controller controller-factory