Подтвердить что ты не робот

Получение "Не найден тип, который соответствует контроллеру с именем" SampleSlashBaseService "при попытке использования WebAPI

У меня есть проект 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 также выглядит правильно.

4b9b3361

Ответ 1

Нашел проблему.

ApiControllers имена классов должны быть помечены как "Контроллер", а мой - нет. Изменение его на SampleSlashBaseController решило проблему.

Примечание: Можно суффикс его с помощью "Сервис", как и я, но тогда вы должны реализовать пользовательский IHttpControllerSelector, как описано здесь: http://netmvc.blogspot.no/2012/06/aspnet-mvc-4-webapi-support-areas-in.html

Ответ 2

Вам также необходимо убедиться, что класс Controller Public

Ответ 3

В моем случае контроллер был правильно определен, но не был опубликован.

Ответ 4

В моем случае было два контроллера с тем же именем в разных папках. Переименование их решило проблему мгновенно.

Ответ 5

Для чего это стоит, я столкнулся с этим, и моя проблема заключалась в том, что мой добавленный вручную класс не наследовал от ApiController. Определение класса должно быть public class QueueController : ApiController не public class QueueController. Какая глупость игнорировать.