Asp.net web api Web API 2:添加了一个新控制器,它赢得了';你不注册吗?

Asp.net web api Web API 2:添加了一个新控制器,它赢得了';你不注册吗?,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,在这里玩得很开心。。。(Web API 2.1、.NET 4.5.1) 我有一个控制器工作得很好: [RoutePrefix("v1/members")] public class MembersController : ApiController { [Route("{id}")] public Member Get(string id) { DataGateway g = new DataGateway(); return g.Get

在这里玩得很开心。。。(Web API 2.1、.NET 4.5.1)

我有一个控制器工作得很好:

[RoutePrefix("v1/members")]
public class MembersController : ApiController
{
    [Route("{id}")]
    public Member Get(string id)
    {
        DataGateway g = new DataGateway();

        return g.GetMember(id);
    }
}
按照预期和期望工作,如:

/v1/members/12345

但是我今天添加了一个新的控制器,它似乎根本没有被注册或识别。它不会添加到帮助页面,并且在尝试访问时返回404 Not Found:

[RoutePrefix("v1/test")]
public class Test : ApiController
{
    [Route("{id}")]
    public string Get(int id)
    {
        return "value";
    }
}
如前所述,新控制器不会出现在帮助页面中,并返回404:

/v1/test/12345

我做错了什么

编辑以添加:

我安装了跟踪,但它似乎并没有达到这一点。第一个控制器工作正常并显示跟踪,新的测试控制器不显示任何跟踪信息

编辑2:

更新了示例代码以更好地匹配我的实际代码,这一直是问题所在。

问题在于:

[RoutePrefix("v1/test")]
public class Test : ApiController
改为:

[RoutePrefix("v1/test")]
public class TestController : ApiController

似乎最重要的单词“Controller”必须出现在类名中,才能实现神奇的效果。

你有没有尝试过对路径进行约束?(
[Route({id:int}”)]
)id需要接受字符串(不要询问),但出于测试目的,我将尝试这样做。您建议它的原因是什么?因为
id
参数是一个整数。(我说的是你的第二条路线,不是第一条路线)只是在这里添加一些背景知识,Web API和MVC是基于约定的,因此文件夹和类命名变得非常重要。例如,在MVC中,TestController还需要一个视图/测试文件夹来包含Razor文件,而在幕后,.NET将自动知道这些文件是同时存在的。在Web API和MVC中,控制器都需要正确命名(即MyThingController而不是MyThing),以便站点知道如何应用路由。