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

azz*_*ack 18 .net c# asp.net-mvc asp.net-web-api attributerouting

我有一个带有名为SlashBaseService的基本ApiController的webapi项目:

[RouteArea("uBase")]
public abstract class SlashBaseService : ApiController
{
}
Run Code Online (Sandbox Code Playgroud)

生成的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 });
Run Code Online (Sandbox Code Playgroud)

我还在一个单独的程序集中有一个testservice:

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

    [GET("Echo/{message}")]
    public string GetEcho(string message)
    {
        return message;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

未找到与名为"SampleSlashBaseService"的控制器匹配的类型.

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

azz*_*ack 53

发现了问题.

ApiControllers类名需要以"Controller"为后缀,而我的不是.改变它来SampleSlashBaseController解决问题.

注意:可以像我一样用"服务"作为后缀,但是你必须实现IHttpControllerSelector如下所述的自定义:http://netmvc.blogspot.no/2012/06/aspnet-mvc-4-webapi-支撑区,in.html

  • 我沿着相反的路线做了些什么.我有控制器,它不应该是!`defaults:new {controller ="APIController"}`应该是`defaults:new {controller ="API"}`你必须在你的`WebApiConfig.cs`中使用OMIT`Controller`! (7认同)

小智 9

您还需要确保Controller类是Public

  • 帮帮我,谢谢你的回答 (3认同)

mca*_*nti 6

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