Asp.net web api Web API 2:添加了一个新控制器,它赢得了';你不注册吗?
在这里玩得很开心。。。(Web API 2.1、.NET 4.5.1) 我有一个控制器工作得很好: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
[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),以便站点知道如何应用路由。