找不到与控制器匹配的类型
本文关键字:类型 控制器 找不到 | 更新日期: 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添加到文件名和类名的末尾。