我们有一个新的.NET 4.7.1 API,其中一个控制器已经在工作。但是,当添加第二个控制器时,我们尝试访问新控制器上的方法时会收到404错误
正在运行的现有控制器,使用 http://localhost/OurAPI/api/v1/UserInfo/GetUserInfo :
[RoutePrefix("api/v1/UserInfo")]
public class UserInformationController : ApiController
{
[HttpGet]
[Route("GetUserInfo", Name = "GetUserInfo")]
public IHttpActionResult GetUserInfo()
{
return Ok("Old Controller");
}
}
使用 http://localhost/OurAPI/api/v1/Test/TestStuff 访问损坏的新控制器:
[RoutePrefix("api/v1/Test")]
public class TestController : ApiController
{
[HttpGet]
public IHttpActionResult TestStuff()
{
return Ok("Test");
}
}
我的路线配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
我为为什么发生这种情况而感到困惑,我已经在不同的API中创建了许多控制器,却没有遇到这样的问题。
更新:
我仔细阅读了所有答复,感谢大家帮助我弄清楚了这一点!
在尝试缩小/隐藏最初问题中显示的代码时,我不小心进行了一些错误的复制和粘贴操作,可能会误导每个人阅读它。
我的实际新控制器代码:
using System.Web.Mvc;
[RoutePrefix("api/v1/Test")]
public class TestController : Controller
{
[HttpGet]
public IHttpActionResult TestStuff()
{
return Ok("Test");
}
}
我在这里的问题是,该项目是网络API ,而不是 MVC 项目。我应该使用System.Web.Http时使用System.Web.Mvc属性和类型。
我正在工作的新控制器代码:
using System.Web.Http;
[RoutePrefix("api/v1/Test")]
public class TestController : ApiController
{
[HttpGet]
[Route("SetPassword")]
public IHttpActionResult Test()
{
return Ok("test");
}
}
答案 0 :(得分:2)
似乎您只是忘记为路由添加属性。这应该可以解决您的问题。注意:“名称”部分是可选的,但是由于您在另一个端点上有此名称,因此我也选择将其放在此处。
[Route("TestStuff", Name = "TestStuff")]
但是,我想指出的是,您的路由配置设置了常规路由,但是随后您正在使用属性路由。我通常建议选择一个。
.NET Framework WebApi2文档:https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/ 相同主题的.NET Core MVC文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.2