2016-08-03 4 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, просто дать ему необработанный объект и пусть 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

Не stringify данные в го e ajax caller. Это должно работать:

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); 
       } 
      }); 

(также отметить, что я использую toISOString() на значения JavaScript даты, когда контроллер ожидает DateTime типов - это дает последовательные преобразования до тех пор, пока объект JavaScript на самом деле значение даты - в качестве альтернативы вы можете оставить ваши типы контроллеров как string и падение, что toISOString(), но я считаю преобразование ISO очень полезно)

-2

вам метод Ajax вы передаете параметр кинуть «данные» из параметров, однако ваш апи использует «HttpGet». Чтобы исправить способ сделать вызов ajax с помощью «Get», вы передадите этот параметр в URL-адрес.

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

Хотя это один из способов сделать это, это не требуется. Get и data param работают нормально. – jleach

+1

jQuery преобразует 'data' в строку запроса для GET – DavidG

Смежные вопросы