我们有一个新的.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");
}
}
我的问题是这个项目是一个Web 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");
}
}
看起来你只是忘了为路线添加一个属性。这应该可以解决您的问题。注意:“名称”部分是可选的,但由于您在另一个端点上有它,我也选择将它放在这里。
[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