我正在尝试在同一个控制器上支持模型上的子操作的多个GET请求,但是我无法使路由正常工作。我想支持 -
/{controller}/{id}/{action}
虽然没有踩到默认
/{controller}/{id}
我尝试创建另一个路由配置 -
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}"
);
但是,这允许 / {controller} / {id} / {action} 的路线,但 / {controller} / {id} 方法停止工作通过"找到多个动作"异常。
以下是我试图揭示的三种GET方法的示例 -
public HttpReponseMessage GetItem()
{
}
public HttpResponseMessage GetItem(int id)
{
}
public HttpResponseMessage GetItemMetaData(int id)
{
}
答案 0 :(得分:3)
如果您使用的是Web API 2,请尝试使用Attribute Routing,这使得这些情况非常容易处理。如果您仍在Web API 1上,请查看Attribute Routing for Web API。如果由于某种原因您不想使用任何一种,您可以更详细地指定路线,如下所示:
// Map your specific route first.
config.Routes.MapHttpRoute(
name: "NestedApi",
routeTemplate: "api/{controller}/{id}/items",
defaults: new{action = "GetItems"}
);
// You can have other specific routes here.
// Map all other GET requests to a Get method.
config.Routes.MapHttpRoute(
name: "DefaultGetApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional, action = "Get" },
constraints: new{httpMethod = new HttpMethodConstraint(HttpMethod.Get)}
);
// Use default route for all the rest.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
答案 1 :(得分:0)
尝试在SO问题上使用此答案Asp.Net Web API Routing not hitting custom action作为起点。当我在我的应用程序中设计自定义路径时,它对我帮助很大。
为了调试所有自定义路由,我默认使用ASP.NET Web API Route Debugger。