我在尝试通过额外的操作来增强我的 WebAPI 控制器时偶然发现了这个问题。
假设你会有
public IEnumerable<string> Get()
{
return this.Repository.GetAll();
}
[HttpGet]
public void ReSeed()
{
// Your custom action here
}
现在有两种方法可以满足触发 TS 描述的问题的 /api/controller 请求。
我不想在我的附加操作中添加“虚拟”参数,所以我查看了默认操作并想出了:
[ActionName("builtin")]
public IEnumerable<string> Get()
{
return this.Repository.GetAll();
}
对于结合“双重”路由绑定的第一种方法:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "builtin", id = RouteParameter.Optional },
constraints: new { id = @"\d+" });
config.Routes.MapHttpRoute(
name: "CustomActionApi",
routeTemplate: "api/{controller}/{action}");
请注意,即使第一个路由模板中没有“action”参数,您仍然可以配置默认操作,允许我们将“正常”WebAPI 调用的路由和对额外操作的调用分开。