如何在ASP.NET MVC 4中映射这些WebApi路由?

时间:2012-08-09 13:44:56

标签: asp.net-mvc asp.net-mvc-routing asp.net-web-api

我主要使用默认的WebApi路由映射,如下所示:

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

这工作正常,我的网址如下:

    [GET]  /api/customers    Get all customers
    [GET]  /api/customers/1  Get a specific customer
    [POST] /api/customers    Create a customer

到目前为止一切都很好,但现在我想添加一个“搜索”设施。为此,我将POST一个代表搜索条件的对象,因为在URL上有太多的选项可以作为GET。我的计划是URL看起来像这样:

    [POST] /api/customers/search

然而,使用上面的默认路由,服务器抱怨“找到了与请求匹配的多个操作”,我认为这是因为我现在有两个接受POST数据的控制器方法(一个用于“创建”,一个用于“搜索”),路由无法区分它们。

我尝试添加一个包含{action}组件的新路由映射,但这并未解决问题 - 可能是因为该URL对两个路由映射都有效。 (我会以某种方式阻止“/ search”变体与匹配默认路由映射。

建议吗?

1 个答案:

答案 0 :(得分:1)

如何添加以下路线:

routes.MapHttpRoute(
        name: "SearchRouteName",
        routeTemplate: "api/{controller}/search/{id}",
        defaults: new { controller = "customers", id = RouteParameter.Optional }
    );

在DefaultApi路由映射之前?