gpt4 book ai didi

asp.net-web-api - Webapi DefaultHttpControllerSelector 无法正确解析我的 Controller

转载 作者:行者123 更新时间:2023-12-04 04:58:42 25 4
gpt4 key购买 nike

我有一个包含一些 Controller 的 WebApi 应用程序(它们是使用扩展方法 RegisterApiControllers 注册的)。此应用程序引用了另一个程序集,其中包含我不想公开的其他 Controller (我已检查它们是否未在容器中注册)。碰巧两者都有一个 OrderController,当我尝试访问/api/Order url 时,我得到一个异常“找到了与名为 'order' 的 Controller 匹配的多种类型。”堆栈跟踪显示我在 DefaultHttpControllerSelector 中。

我已经看到 AutofacControllerFactory 曾经存在,甚至还有一个注册它的 ConfigureWebApi,但它不再存在于默认分支中。(你可以在这里看到它 http://alexmg.com/post/2012/03/09/Autofac-ASPNET-Web-API-(Beta)-Integration.aspx )

似乎我们也无法在 WebApi 中过滤路由定义的命名空间(MVC 是可能的)。

那么关于如何仅使用在我的 Autofac 容器中注册的 Controller 而不使用似乎扫描所有引用的程序集以发现 Controller 的 DefaultHttpControllerSelector 的任何想法?

谢谢

最佳答案

问题是使用 autofac 注册 Controller 与路由过程并不真正相关。只有当路由进程确定了要分派(dispatch)到哪个 Controller 时,才会调用 Autofac 来解析类型。
看起来,从源代码中挖掘,您需要编写一个替换 IHttpControllerSelector为了处理两个具有相同名称的 Controller 。 (这真的很糟糕顺便说一句)。
您也许可以替换 DefaultHttpControllerTypeResolver使用传递谓词的实例,该谓词从您要忽略的程序集中过滤掉 Controller 。这是一个有点笨拙的解决方案,但可能会奏效。

实际上,您可能能够将 DefaultHttpControllerTypeResolver 完全替换为基于 Autofac 容器中注册的解析器。这是一个非常简单的接口(interface),所以只要 Autofac 有某种发现机制,你应该是金。

   public interface IHttpControllerTypeResolver
{
ICollection<Type> GetControllerTypes(IAssembliesResolver assembliesResolver);
}

关于asp.net-web-api - Webapi DefaultHttpControllerSelector 无法正确解析我的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16422927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com