Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在运行时检查是否存在具有给定名称的控制器_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core 在运行时检查是否存在具有给定名称的控制器

Asp.net core 在运行时检查是否存在具有给定名称的控制器,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,我已经在MVC5应用程序中使用了现有的功能,用于根据名称检查控制器是否存在,如果存在,则使用相同的操作将其重定向到该控制器。但我正在努力调整我的逻辑,以便在MVC核心中完成同样的任务 在MVC5中,我可以使用ControllerFactory,使用新的requestContext(控制器名称)调用CreateController(requestContext,controllerName),然后检查结果 在MVC核心中,似乎仍然涉及ControllerFactory,并且仍然有一个方法用于Cre

我已经在MVC5应用程序中使用了现有的功能,用于根据名称检查控制器是否存在,如果存在,则使用相同的操作将其重定向到该控制器。但我正在努力调整我的逻辑,以便在MVC核心中完成同样的任务

在MVC5中,我可以使用
ControllerFactory
,使用新的requestContext(控制器名称)调用
CreateController(requestContext,controllerName)
,然后检查结果

在MVC核心中,似乎仍然涉及
ControllerFactory
,并且仍然有一个方法用于
CreateController
,但其签名是
CreateController(ActionContext上下文)

传入一个空的ActionContext会导致一个关于没有设置ControllerTypeInfo的错误(我假设在
ControllerFeature
集合中查找它),但是如果我有了它,我就不需要执行任何操作,因为我已经有足够的资源来确定控制器是否存在


是否有其他我可以使用或从ServiceContainer请求的东西,以确定是否有可用的特定名称的控制器?

您可以使用反射,但速度会慢一些。我怀疑您尝试的方式可能是更好的方向,但我认为值得一提的是反射。如果我能找到MVC用于将控制器名称解析为ControllerTypeInfo实例的源代码,那也行,但是我还没有很好地筛选源代码。但是你要寻找的控制器应该在你自己的dll中,对吗?是的,但是如果我使用反射,那么我假设用于注册控制器的约定(使用“控制器”后缀)永远不会改变。但是,随着MVC核心的模块化,这种情况可能会发生变化,那么我的思考就错了。这就是为什么我希望使用MVC的现有特性来查询它应该已经拥有的路由请求信息,以确定它是否有特定的控制器。反射可能在紧急情况下工作,但我真的希望找到一种使用MVC的方法。我有逻辑来检查MVC5中是否存在控制器或视图,但使用MVC Core,我只找到了一种检查视图是否存在的方法。我仍然无法检查控制器。您可以使用反射,但速度会慢一些。我怀疑您尝试的方式可能是更好的方向,但我认为值得一提的是反射。如果我能找到MVC用于将控制器名称解析为ControllerTypeInfo实例的源代码,那也行,但是我还没有很好地筛选源代码。但是你要寻找的控制器应该在你自己的dll中,对吗?是的,但是如果我使用反射,那么我假设用于注册控制器的约定(使用“控制器”后缀)永远不会改变。但是,随着MVC核心的模块化,这种情况可能会发生变化,那么我的思考就错了。这就是为什么我希望使用MVC的现有特性来查询它应该已经拥有的路由请求信息,以确定它是否有特定的控制器。反射可能在紧急情况下工作,但我真的希望找到一种使用MVC的方法。我有逻辑来检查MVC5中是否存在控制器或视图,但使用MVC Core,我只找到了一种检查视图是否存在的方法。我仍然无法检查控制器。