2014-11-06 82 views
1

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

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

+0

如果您删除'config.MapHttpAttributeRoutes()'它是否工作?我可能是错的,但如果您使用该选项,我认为您还需要使用路线上的属性,例如'[Route(“api/test/{id}”)]' – James 2014-11-06 16:50:28

+0

刚刚尝试 - 仍然没有去。 :( – Savio 2014-11-06 16:52:12

+1

@Savio,为什么要''测试''路由到''Get'“? – 2014-11-06 16:53:45

回答

0

我现在已经解决了这个问题 - 通过创建新项目,并复制所有类。 现在一切正常。

“你试过关掉它吗?”噢..

+0

不想在这里意味深长,但我真的不认为这是一个真正的答案。这个问题是什么?我面临同样的问题,我正在寻求解决它。 – SoftwareSavant 2015-09-11 12:15:01

+0

只有当我有一个 - 我完全是我写的。重新创建项目并移动所有类以解决此问题。 – Savio 2015-09-15 11:32:28

1

要确定要调用哪个动作,框架使用路由表。 Web API的Visual Studio项目模板创建默认路由:使用默认路由模板,Web API使用HTTP方法选择操作。但是,你也可以创造一个动作的名称包含在URI路径:

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

这样你就可以访问你的网址........./API /测试

+0

增加了额外的路由,不去。我认为这个问题与不能确定采取行动的不同之处在于,错误在于没有找到一个控制器,因为它还没有选择行动。 – Savio 2014-11-06 17:05:07

+0

如果你尝试访问http:// localhost:52192/api/test/Get /(如我所建议的那样更改路由之后),它会起作用吗?因为对我来说它很完美 – lordpiti 2014-11-07 10:20:53

0

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

相关问题