找不到新的API控制器

时间:2019-04-17 15:46:07

标签: c# asp.net .net asp.net-web-api

我们有一个新的.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");
        }
    }

1 个答案:

答案 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