ASP.NET 托管在 IIS 上的 WebAPI2 快速加载来自 2 个不同项目的控制器
ASP.NET WebAPI2 hosted on IIS express loads controllers from 2 differents projects
我创建了一个包含许多 OWIN WebApi2 项目的解决方案。其中两个项目的控制器具有相同的路由。
当我尝试启动第一个项目时,收到此错误消息:
Multiple controller types were found that match the URL.
This can happen if attribute routes on multiple controllers match the requested URL.
The request has found the following matching controller types:
Project1.WebApi.Controllers.Project1Controller Project2.WebApi.Controllers.Project2Controller
但是,这两个项目使用不同的命名空间,并且它们之间没有任何依赖关系。
为什么项目 2 的控制器会加载项目 1 的控制器?
谢谢
However, both projects use different namespaces and don't have any
dependencies between them.
这没关系。在运行时,ASP.NET Web API 将检查从 ApiController
继承的所有引用程序集中的所有类型,并将它们视为候选者。所以即使你在 2 个完全不同的项目中有 2 个不同的控制器,只要它们有路由冲突,这种冲突就会在运行时表现出来。您将需要修复您的应用程序,以便您永远不会使用相同的路由将 2 个控制器加载到运行时。并且当您考虑它时,这实际上很有意义:给定一条路线,ASP.NET Web API 如果它们都定义完全相同的路线,则将不知道要调用 2 个控制器中的哪一个。在这种情况下,一旦应用程序启动,就会在运行时检测到此异常,以便开发人员尽快了解此问题。
我创建了一个包含许多 OWIN WebApi2 项目的解决方案。其中两个项目的控制器具有相同的路由。
当我尝试启动第一个项目时,收到此错误消息:
Multiple controller types were found that match the URL.
This can happen if attribute routes on multiple controllers match the requested URL.
The request has found the following matching controller types:
Project1.WebApi.Controllers.Project1Controller Project2.WebApi.Controllers.Project2Controller
但是,这两个项目使用不同的命名空间,并且它们之间没有任何依赖关系。
为什么项目 2 的控制器会加载项目 1 的控制器?
谢谢
However, both projects use different namespaces and don't have any dependencies between them.
这没关系。在运行时,ASP.NET Web API 将检查从 ApiController
继承的所有引用程序集中的所有类型,并将它们视为候选者。所以即使你在 2 个完全不同的项目中有 2 个不同的控制器,只要它们有路由冲突,这种冲突就会在运行时表现出来。您将需要修复您的应用程序,以便您永远不会使用相同的路由将 2 个控制器加载到运行时。并且当您考虑它时,这实际上很有意义:给定一条路线,ASP.NET Web API 如果它们都定义完全相同的路线,则将不知道要调用 2 个控制器中的哪一个。在这种情况下,一旦应用程序启动,就会在运行时检测到此异常,以便开发人员尽快了解此问题。