如何为多个Post写地图/路线

时间:2012-03-26 19:52:48

标签: asp.net-web-api

您好我有一个需要多个POST的API控制器:

一个用于保存/更新:

public Order PostOrder(Order order)
{

}

另一个搜索订单

public IQueryable<Order> SearchWithParameter(SearchOrderParameter searchParameter)
{

}

我在Global.asax中添加了以下Route方法

routes.MapHttpRoute(
            name: "SearchWithParameter",
            routeTemplate: "api/{controller}/{action}/{searchParameter}",
            defaults: new { action = "post" }
        );

在Js中我称之为:

 var SearchOrderParameter = new Object();
 SearchOrderParameter.OrderID = 1197;
 $.ajax({
    url: "http://localhost:9003/api/orders/SearchWithParameter",
    data: SearchOrderParameter,
    type: "Post",
    dataType: "json",
    success: function (value) {
        alert(value);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(textStatus);
    }
 });

但每次此方法调用PostOrder时。请指导我,我缺少的内容,以便致电SearchWithParameter

2 个答案:

答案 0 :(得分:3)

尝试使用这些路线......

  routes.MapHttpRoute(
            name: "ApiAction",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { action = @"^[A-Za-z]" }
        );

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

答案 1 :(得分:1)

默认情况下,HTTP操作映射到以HTTP方法名称开头的C#函数。因此,HTTP POST将被映射到Post ....()方法,而不会映射到Search ....()方法。您可以添加HttpPost属性以使SearchWithParameter()方法也适用于post。