【问题标题】:MVC WebAPI Route and TestingMVC WebAPI 路由和测试
【发布时间】:2013-09-05 11:07:13
【问题描述】:

我正在尝试使用 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/Events HTTP/1.1

谁能告诉我为什么我在使用上述方法时出现未找到错误以及如何修复它?

【问题讨论】:

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


    【解决方案1】:

    问题在于您声明的默认操作 (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 }
            );
    

    【讨论】:

    • 嗨,刚刚删除了“DefaultAPI”路由并再次尝试,但没有任何乐趣。 RouteConfig 中定义的路由在这里重要吗?
    • 我认为你错过了我的观点。在前 2 个路由中,您指定了默认 action。这就是您需要删除的内容。您可以保留 DefaultApi 路由本身。我只是从我的答案中省略了 DefaultApi 路由,因为它不需要更改。
    • @StephenCossgrove 您是否尝试仅删除该操作?
    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多