2

我主要使用默认的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

到目前为止一切都很好,但现在我想添加一个“搜索”工具。为此,我将发布一个表示搜索条件的对象,因为在 URL 上作为 GET 执行此操作的选项太多。我的计划是 URL 看起来像这样:

    [POST] /api/customers/search

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

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

请问有什么建议吗?

4

1 回答 1

1

如何添加以下路线:

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

就在 DefaultApi 路由映射之前?

于 2012-08-09T13:52:22.220 回答