【问题标题】:New API Controller Not Being Found [closed]未找到新的 API 控制器 [关闭]
【发布时间】: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


【解决方案1】:

您似乎只是忘记为路线添加属性。这应该可以解决您的问题。注意:“名称”部分是可选的,但由于您在另一个端点上有它,所以我也选择将它放在这里。

[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

【讨论】:

  • 他们显示错误的配置。对于 MVC 路由,web api 路由默认在WebApiConfig 类中。
猜你喜欢
  • 2015-12-28
  • 2013-04-02
  • 2016-07-12
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2019-07-12
相关资源
最近更新 更多