获取“尝试使用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
。 多么愚蠢的事情要忽视。