获取“尝试使用WebAPI时未找到与名为’SampleSlashBaseService’的控制器匹配的类型”

我有一个webapi项目,其基础ApiController名为SlashBaseService:

[RouteArea("uBase")] public abstract class SlashBaseService : ApiController { } 

生成的dll用于WebForms项目中,因此我还有一个WebActivator类,其中包含以下代码来生成路由:

 RouteTable.Routes.MapHttpAttributeRoutes(config => { // Get all services inheriting from SlashBaseService foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (var type in assembly.GetTypes()) { if (type.IsSubclassOf(typeof(SlashBaseService))) { // Scan assembly config.ScanAssembly(assembly); // Skip the remaining types in this assembly break; } } } }); RouteTable.Routes.MapHttpRoute( name: "DefaultBase", routeTemplate: "base/{controller}/{id}", defaults: new { id = RouteParameter.Optional }); 

我还在一个单独的程序集中有一个测试服务:

 public class SampleSlashBaseService : SlashBaseService { [GET("TestOpenMethod")] public string GetTestOpenMethod() { return "Hello anonymous!"; } [GET("Echo/{message}")] public string GetEcho(string message) { return message; } } 

所有非常简单的东西。 问题是,当我尝试转到其中一个生成的URL时,我收到以下消息:

未找到与名为“SampleSlashBaseService”的控制器匹配的类型。

来自/routes.axd的路由列表也看起来正确。

发现了问题。

ApiControllers类名称需要以“Controller”为后缀,而我的后缀不是。 将其更改为SampleSlashBaseController解决了这个问题。

注意:可以像我一样用“服务”作为后缀,但是你必须实现一个自定义的IHttpControllerSelector如下所述: http : IHttpControllerSelector -支持-区- in.html

您还需要确保Controller类是Public

在我的情况下,控制器已正确定义,但未标记为公开。

就我而言,在不同的文件夹中有两个具有相同名称的控制器。 重命名它们立即解决了问题。

为了它的价值,我遇到了这个,我的问题是我手动添加的类不是从ApiControllerinheritance的。 类定义需要是public class QueueController : ApiController不是public class QueueController 。 多么愚蠢的事情要忽视。