Getting “No type was found that matches the controller named 'SampleSlashBaseService'” when trying to use WebAPI

StackOverflow https://stackoverflow.com/questions/11384552

Question

I have a webapi project with a base ApiController named SlashBaseService:

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

The resulting dll is used in a WebForms project so I also have a WebActivator class with the following code to generate routes:

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 });

I also have a testservice in a separate assembly:

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

    [GET("Echo/{message}")]
    public string GetEcho(string message)
    {
        return message;
    }
}

All pretty simple stuff. The problem is when I try to go to one of the urls this generates i get the following message:

No type was found that matches the controller named 'SampleSlashBaseService'.

The route list from /routes.axd also looks correct.

Was it helpful?

Solution

Found the problem.

ApiControllers class names need to be suffixed with "Controller", and mine was not. Changing it to SampleSlashBaseController solved the problem.

NOTE: It is possible to suffix it with "Service" as I did, but then you have to implement a custom IHttpControllerSelector like described here: http://netmvc.blogspot.no/2012/06/aspnet-mvc-4-webapi-support-areas-in.html

OTHER TIPS

You also need to make sure the Controller class is Public

In my case the Controller was defined properly, but was not marked public.

In my case, there were two controllers with the same name, in different folders. Renaming them solved the problem instantly.

For what it's worth, I ran into this and my problem was my manually-added class wasn't inheriting from ApiController. The class definition needs to be public class QueueController : ApiController not public class QueueController. What a dumb thing to overlook.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top