MVC Web API路由和测试

时间:2013-09-05 02:00:47

标签: c# asp.net-mvc-4 asp.net-web-api

我正在尝试使用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

当我使用上述内容以及如何修复时,有人能告诉我为什么我会收到一个未找到的错误吗?

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 }
        );