在使用我们的自定义控制器工厂时,我们使用Reflection来拉取并创建一个正确的控制器类型的实例,该实例应该针对哪个程序集.我调试了这个,并确认正在返回正确的Controller.
发生的问题发生在Action Method调用期间.即使我们的控制器工厂正在为我们的请求返回正确的控制器,似乎MVC可能预装了这些组件中的每个控制器,并且仍然将这些作为可能的方向.我们在调用Action方法时遇到的确切错误是:当前请求在以下操作方法之间不明确
有没有办法告诉MVC忽略控制器工厂的请求中没有返回的其他控制器,这样它就知道不会试图查看似乎没有加载的其他控制器?如果MVC只是要检查所有其他控制器的Action Method匹配,那么ControllerFactory有什么意义呢?我必须在这里找到一些东西.
我发现解决此问题的唯一其他解决方案是向所涉及的所有操作方法添加ActionMethodSelector属性.然而,这使得解决方案在展望未来时非常脆弱,并且考虑到每个Action Action都需要在它们之间重复相同的属性.
当我实现一个自定义控制器工厂时,期待有关MVC为什么会这样做的任何建议或知识,该控制器工厂应该决定选择使用Action方法的Controller.提前致谢!
解决方法
〔路线( “客户/查寻/ {名称}”)]
public ActionResult LookupByName(string name)
{
//此处自定义代码内容
}
事实证明,在这些ActionMethods上指定Route属性优先于所选控制器,并且无论如何都会调用与当前请求的控制器/操作匹配的所有控制器.我们的解决方案是删除此属性并将RouteConfig.cs文件中所需的内容放入其中,以便动态加载,并将完全控制权返回给我们的自定义控制器工厂,以决定专门用于所选ActionMethod的Controller.
routes.MapRoute( 名称:“CustomerLookup”, url:“customer / lookup / {name}”, 默认值:new {controller =“Customer”,action =“LookupByName”,name = UrlParameter.Optional});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。