Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
C# 在aspnet core 2中发现并共享aspnet mvc和webapi之间的控制器_C#_Asp.net Core_Asp.net Core Webapi - Fatal编程技术网

C# 在aspnet core 2中发现并共享aspnet mvc和webapi之间的控制器

C# 在aspnet core 2中发现并共享aspnet mvc和webapi之间的控制器,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,我们有一个Spa客户端,它运行在aspnet核心web应用程序(aspnet核心Spa模板)中。Api项目是业务逻辑和数据访问驻留的地方,可由其他客户端(如本机、其他SPA等)调用。web应用程序受cookie middlewre保护,外部提供商可以登录,而web Api则受承载令牌保护 我们注意到,如果我们在Web应用程序中将引用添加到Api项目中,则Api项目中定义的控制器在Web应用程序中可用。因此,只需添加一个引用,我们就可以从驻留在Web应用程序中的Spa对/api/数据进行本地aj

我们有一个Spa客户端,它运行在aspnet核心web应用程序(aspnet核心Spa模板)中。Api项目是业务逻辑和数据访问驻留的地方,可由其他客户端(如本机、其他SPA等)调用。web应用程序受cookie middlewre保护,外部提供商可以登录,而web Api则受承载令牌保护

我们注意到,如果我们在Web应用程序中将引用添加到Api项目中,则Api项目中定义的控制器在Web应用程序中可用。因此,只需添加一个引用,我们就可以从驻留在Web应用程序中的Spa对/api/数据进行本地ajax调用。我们在这里没有做任何额外的事情,没有定制的控制器解析器,程序集加载等等


这就是aspnet核心mvc的工作原理吗?我们是否正确地假设web应用程序在配置主机时只会发现控制器,而忽略Api项目中的任何program.cs/startup.cs

不,这不是它的工作原理。首先,“MVC”和“WebAPI”之间的描述在这一点上比任何东西都更迂腐。在核心,它们是相同的。如果您的项目只是一个API,您可以在标准MVC服务之外保留一些东西,但它仍然使用“MVC”。因此,将某个东西称为“API”或“MVC”项目实际上并不意味着什么。你可以根据需要混合搭配

如果您有两个独立的项目,那么您应该遵循这一点,并将所有内容分开。一方不应该依赖另一方。您始终可以从MVC项目“调用”API,就像使用任何其他HTTP托管服务一样。但是,您将无法利用
UrlHelper
等功能从MVC项目中为API操作生成URL。你只需要“知道”这些


如果您希望这两个项目紧密集成,那么它们不应该是两个项目。只要有一个网站项目,把你所有的API和MVC的东西都放进去。然后,你将真正拥有所有共享的东西。

不。这不是它的工作方式。首先,“MVC”和“WebAPI”之间的描述在这一点上比任何东西都更迂腐。在核心,它们是相同的。如果您的项目只是一个API,您可以在标准MVC服务之外保留一些东西,但它仍然使用“MVC”。因此,将某个东西称为“API”或“MVC”项目实际上并不意味着什么。你可以根据需要混合搭配

如果您有两个独立的项目,那么您应该遵循这一点,并将所有内容分开。一方不应该依赖另一方。您始终可以从MVC项目“调用”API,就像使用任何其他HTTP托管服务一样。但是,您将无法利用
UrlHelper
等功能从MVC项目中为API操作生成URL。你只需要“知道”这些


如果您希望这两个项目紧密集成,那么它们不应该是两个项目。只要有一个网站项目,把你所有的API和MVC的东西都放进去。然后,您将真正共享所有内容。

不过,不知何故,控制器正在被发现,所以撇开这在体系结构上是否有意义不谈,我关于如何工作的问题更多的是“当您添加这样的引用时,它会自动发现并注册这些控制器吗”?从我看到的情况来看,答案似乎是肯定的。此外,我知道您可以随时进行HTTP调用,但通过这种方式,您不必这样做。您可以在web内托管控制器,以便SPA应用程序调用它,而无需任何额外令牌。Api可以为其他客户端托管在不同的应用程序中。这是相当标准的。路由框架扫描程序集以查找控制器。然而,它制造了一些可能导致事情破裂的奇怪现象。例如,运行的将是MVC项目的StartUp.cs,即使控制器来自API项目。如果这些控制器依赖于API项目中定义的服务,您的应用程序就会启动,因为MVC项目没有注册它们。一般来说,这只会让我们更难判断发生了什么,并使这两个项目紧密结合在一起。甚至最好将共享控制器移动到类库中,因为很明显,除了引用它们的项目所提供的配置(例如,没有StartUp.cs)之外,它们不会从任何配置中受益.然而,不知怎的,控制器正在被发现,所以抛开架构上是否合理不谈,我关于事物如何工作的问题更多的是“当您添加这样的引用时,它是否会自动发现并注册这些控制器”?从我看到的情况来看,答案似乎是肯定的。此外,我知道您可以随时进行HTTP调用,但通过这种方式,您不必这样做。您可以在web内托管控制器,以便SPA应用程序调用它,而无需任何额外令牌。Api可以为其他客户端托管在不同的应用程序中。这是相当标准的。路由框架扫描程序集以查找控制器。然而,它制造了一些可能导致事情破裂的奇怪现象。例如,运行的将是MVC项目的StartUp.cs,即使控制器来自API项目。如果这些控制器依赖于API项目中定义的服务,您的应用程序就会启动,因为MVC项目没有注册它们。一般来说,这只会让我们更难判断发生了什么,并将两个项目紧密地结合在一起。甚至最好将共享控制器移动到类库中,因为很明显,除了引用它们的项目所提供的配置(例如,没有StartUp.cs)之外,它们不会从任何配置中受益。