2016-08-03 19 views
1

Es ist unklar, von hier aus http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 wie mehrere Parameter mit ApiController-Methode zu verwenden und was ist die URL, um es auch aufzurufen. Irgendeine Ahnung?ApiController-Methode mit mehreren Parametern

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

Sie sollten 'JSON.stringify' nicht für diese Parameter verwenden, geben Sie einfach das rohe Objekt. – DavidG

Antwort

1

Sie sollten ihm einen String an die data Parameter übergeben wird, gibt nur das rohe Objekt nicht JSON.stringify als dass für diese Parameter verwenden selbst und lassen Sie jQuery sie in eine Abfragezeichenfolge konvertieren.

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

nicht Sie die Daten in th stringify e Ajax Anrufer. Dies sollte funktionieren:

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

(auch anmerken, dass ich toISOString() auf JavaScript Datumswerten verwenden, wenn der Controller DateTime Typen erwarten - dies konsequent Umwandlungen gibt, solange das JavaScript-Objekt ist eigentlich ein Datumswert - alternativ können Sie verlassen Ihre Controller-Typen wie string und fallen, dass toISOString(), aber ich finde die ISO-Konvertierung sehr hilfreich)

-2

Sie Ajax-Methode Sie übergeben die Parameter die "Daten" param werfen, aber Ihre api "HttpGet" verwendet. Um die Art und Weise zu korrigieren, wie man mit "Get" einen Ajax-Anruf tätigt, übergeben Sie den Parameter in der URL.

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

Während dies eine Möglichkeit ist, ist es nicht erforderlich. Get und Datenparameter funktioniert gut. – jleach

+1

jQuery wird eine 'data' in Abfragezeichenfolge für ein GET konvertieren – DavidG