没有类型发现匹配的控制器(No type was found that matches contro

2019-10-21 05:31发布

我使用的Web API来建立我的第一个应用程序,我已经在我无法找到信息的问题绊倒了。

使用样本控制器,如果其工作来测试:

public class TestController : ApiController
{
    // GET api/test
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

WebApiConfig.cs:

public static void Register(HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

每次我尝试使用调用该服务http://localhost:59502/api/test我得到

<Error>
  <Message>
    No HTTP resource was found that matches the request URI 'http://localhost:59502/api/test'.
  </Message>
  <MessageDetail>
    No type was found that matches the controller named 'test'.
  </MessageDetail>
</Error>

有人能指出我究竟做错了什么?

Answer 1:

要确定调用哪个动作,框架使用的路由表。 针对Web API的Visual Studio项目模板创建一个默认路由:

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

使用默认路由模板,网页API使用HTTP方法来选择操作。 但是,你也可以创造一个动作的名称包含在URI路径:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

这样,您将能够访问你的网址......... / API /测试



Answer 2:

通过创建新的项目,并在复制所有的类 - 其实我已经解决了这个问题了。 现在一切都完美的作品。

“你试过把它关掉再打开吗?” 那好吧..



Answer 3:

对我来说,这个问题是由于重命名该项目组装。 重命名和改建工程后,旧的装配仍停留在输出(BIN)的文件夹,并在某种程度上与新的冲突。



Answer 4:

我的问题是,我没有“控制器”后缀添加到文件名(复制到另一个控制器,并将其更名为)

只需添加控制器到文件名的末尾和类名。



文章来源: No type was found that matches controller