2016-08-03 147 views
1

从这里不清楚http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 如何在ApiController方法中使用多个参数以及调用它的URL是什么。任何线索?具有多个参数的ApiController方法

C#

[RoutePrefix("api/workorders")] 
    public class WorkOrdersController : ApiController 
    { 
      [Route("WorkOrdersByDates")] 
      [HttpGet] 
      public IEnumerable<WorkOrderItemView> GetWorkOrdersByDates(string startDate, string endDate) 
      { 
       var r = new List<WorkOrderItemView>(); 
       // 
       return r; 
      } 
    } 

AJAX

var startDate = $('#StartDate').val(); 
      var endDate = $('#EndDate').val(); 

      $.ajax(
       { 
        url: "api/workorders/WorkOrdersByDates", 
        type: "GET", 
        contentType: "application/json", 
        data: JSON.stringify({ startDate: "' + endDate + '", endDate: "' + endDate + '" }), 
        success: function (result) { 
         alert(result.Result); 
        } 
       }); 

的Global.asax

protected void Application_Start() 
     { 


      RouteTable.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = System.Web.Http.RouteParameter.Optional } 
       ); 


      AreaRegistration.RegisterAllAreas(); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
     } 
+2

对于这些参数,您不应该使用'JSON.stringify',只要给它原始对象即可。 – DavidG

回答

1

你不应该使用JSON.stringify这些参数将传递一个字符串data参数ISO转换非常有用),只要给它的原始对象本身并让jQuery将它们转换为查询字符串。

var startDate = $('#StartDate').val(); 
var endDate = $('#EndDate').val(); 

$.ajax(
    { 
     url: "api/workorders/WorkOrdersByDates", 
     type: "GET", 
     contentType: "application/json", 
     data: { startDate: "' + endDate + '", endDate: "' + endDate + '" }, 
     success: function (result) { 
      alert(result.Result); 
     } 
    }); 
1

不要在字符串化第数据e ajax来电者。这应该工作:

var startDate = $('#StartDate').val(); 
     var endDate = $('#EndDate').val(); 

     $.ajax(
      { 
       url: "api/workorders/WorkOrdersByDates", 
       type: "GET", 
       contentType: "application/json", 
       data: { 
        startDate: startDate.toISOString(), 
        endDate: endDate.toISOString() 
       }, 
       success: function (result) { 
        alert(result.Result); 
       } 
      }); 

(也注意到,我使用的JavaScript日期值toISOString()当控制器期待DateTime类型 - 这只要JavaScript对象实际上是一个日期值给出一致的转换 - 或者你可以离开您的控制器类型为string和丢弃toISOString(),但我觉得

-2

你传递参数的Ajax方法抛出“数据”参数,但是你的API使用“HttpGet”。 要纠正使用“Get”进行ajax调用的方法,您需要在URL中传递参数。

$.ajax(
    { 
     url: "api/workorders/WorkOrdersByDates?startDate=" + startDate + "&endDate=" + endDate, 
     type: "GET"... 
+0

虽然这是做到这一点的一种方式,但并不是必需的。获取和数据参数工作得很好。 – jleach

+1

jQuery会将'data'转换为GET的查询字符串 – DavidG