ApiController 路由似乎忽略了操作
ApiController routing seems to ignore action
在 RouteConfig.cs
中定义了这样的路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Durandal", action = "Index", id = UrlParameter.Optional }
);
我希望 http://localhost:50441/api/Induction/GetIntro/4108
解析为
Controller = InductionController
Action = "GetIntro"
Id = 4108
并调用此 class
的 GetIntro 方法
using System.Web.Http;
namespace MyMvcApp.Controllers
{
public class InductionController : ApiController
{
public object GetIntro(int inductionId)
{
//simplified for brevity
return new {
Title = "foo",
Text = "Some introductory blather"
};
}
}
}
但事实并非如此。我收到 404 Not Found,迫切的问题是为什么。
大多数示例似乎使用 MapHttpRoute 而不是 MapRoute,MapRoute 是包装 MapHttpRoute 的扩展方法。
您正在尝试 url http://localhost:50441/api/Induction/GetIntro/4108
但您错过了将 'api' 添加到您的路线定义
将您的路线更改为
routes.MapRoute(
name: "Default",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Durandal", action = "Index", id = UrlParameter.Optional }
);
我对 RouteConfig.cs
的存在感到困惑,它也定义了路由。它是这样工作的:
- WebApi 路由由
WebApiConfig.cs
配置
- MVC 路由由
RouteConfig.cs
配置
- 两者兼得,因为它是一个支持 WebApi 的 MVC 项目。
在我的项目中,在 WebApiConfig.cs 中定义的路由是 api\{controller}\{id}
,在此之前使用另一条路由 api\{controller}\{action}\{id}
解决了问题。
模板生成的 CRUD 方法有效,因为它们匹配 api\{controller}\{id}
在 RouteConfig.cs
中定义了这样的路由 routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Durandal", action = "Index", id = UrlParameter.Optional }
);
我希望 http://localhost:50441/api/Induction/GetIntro/4108
解析为
Controller = InductionController
Action = "GetIntro"
Id = 4108
并调用此 class
的 GetIntro 方法using System.Web.Http;
namespace MyMvcApp.Controllers
{
public class InductionController : ApiController
{
public object GetIntro(int inductionId)
{
//simplified for brevity
return new {
Title = "foo",
Text = "Some introductory blather"
};
}
}
}
但事实并非如此。我收到 404 Not Found,迫切的问题是为什么。
大多数示例似乎使用 MapHttpRoute 而不是 MapRoute,MapRoute 是包装 MapHttpRoute 的扩展方法。
您正在尝试 url http://localhost:50441/api/Induction/GetIntro/4108
但您错过了将 'api' 添加到您的路线定义
将您的路线更改为
routes.MapRoute(
name: "Default",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Durandal", action = "Index", id = UrlParameter.Optional }
);
我对 RouteConfig.cs
的存在感到困惑,它也定义了路由。它是这样工作的:
- WebApi 路由由
WebApiConfig.cs
配置
- MVC 路由由
RouteConfig.cs
配置
- 两者兼得,因为它是一个支持 WebApi 的 MVC 项目。
在我的项目中,在 WebApiConfig.cs 中定义的路由是 api\{controller}\{id}
,在此之前使用另一条路由 api\{controller}\{action}\{id}
解决了问题。
模板生成的 CRUD 方法有效,因为它们匹配 api\{controller}\{id}