找不到与控制器匹配的类型

本文关键字:类型 控制器 找不到 | 更新日期: 2023-09-27 18:29:29

我正在使用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>

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

找不到与控制器匹配的类型

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

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

对于默认路由模板,Web API使用HTTP方法来选择操作。但是,您也可以创建一个路由,其中操作名称包含在URI:中

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

通过这种方式,您将能够访问您的url/api/测试

我现在实际上已经解决了这个问题——通过创建新项目,并复制所有类。现在一切都很顺利。

"你试过把它关掉再打开吗?"哦,好吧。。

对我来说,问题是由于重命名项目程序集引起的。在重命名和重建项目后,旧程序集仍然保留在输出(bin)文件夹中,并且在某种程度上与新程序集冲突。

我的问题是我没有在文件名中添加"Controller"后缀(复制了另一个控制器并将其重命名)

只需将Controller添加到文件名和类名的末尾。