我正在尝试使用RESTful原则设置WebAPI项目,但我需要有关路由配置的帮助。
这是我在WebAPIConfig.cs
中声明的路由config.Routes.MapHttpRoute(
name: "API Child Default",
routeTemplate: "api/v{version}/{controller}/{id}/{child}",
defaults: new { version = "1", action = "Index", child = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi With Version",
routeTemplate: "api/v{version}/{controller}/{id}",
defaults: new { version = "1", action = "Index", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { version = RouteParameter.Optional, id = RouteParameter.Optional }
);
这是控制器动作声明:
public class EventsController : ApiController
{
// GET api/v1/Events
public IEnumerable<string> Get(string version)
{
return new string[] { "value1", "value2" };
}
}
这是我调用的请求没有找到控制器操作: GET / api / v1 /事件HTTP / 1.1
当我使用上述内容以及如何修复时,有人能告诉我为什么我会收到一个未找到的错误吗?
答案 0 :(得分:2)
问题是您声明的默认操作(action = "Index"
)。如果你删除它将工作正常。 (因为您没有在路由中指定{action}
参数,它将始终执行默认值,即Index,它不存在。)
config.Routes.MapHttpRoute(
name: "API Child Default",
routeTemplate: "api/v{version}/{controller}/{id}/{child}",
defaults: new { version = "1", child = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi With Version",
routeTemplate: "api/v{version}/{controller}/{id}",
defaults: new { version = "1", id = RouteParameter.Optional }
);