【发布时间】:2019-04-17 15:46:06
【问题描述】:
我们有一个新的 .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");
}
}
【问题讨论】:
-
您尚未在新控制器中指定路由。您可以从 URI 中删除 TestStuff,也可以将 route("TestStuff") 添加到代码中。
-
路由的
/OurAPI部分在哪里配置?我看不到第一条路线是如何运作的。 -
@DavidG 我相信这来自我们项目属性中设置为“localhost/OurAPI”的项目 URL
标签: c# asp.net .net asp.net-web-api