2016-08-03 15 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

それはちょうどそれを生のオブジェクトを与え、dataパラメータに文字列を渡すとあなたはそれらのパラメータのためJSON.stringifyを使用すべきではありません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アヤックスの発信者。これは動作するはずです:

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

(また、コントローラはDateTime種類を期待しているとき、私はJavaScriptの日付値にtoISOString()を使用することに注意してください - これは限りJavaScriptオブジェクトは、実際の日付値であるとして、一貫性の変換を提供します - 代わりにあなたは残すことができますがstringとしてお使いのコントローラの種類とtoISOString()ことをドロップするが、私はISO変換は非常に有用見つける。)

-2

もしあなたはしかし、あなたのAPIが「HTTPGET」を使用している、「データ」のparamを投げるパラメータを渡しているAjaxの方法。 "Get"を使用してajax呼び出しを行う方法を修正するには、urlでparamを渡します。

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

これはこれを行う1つの方法ですが、必須ではありません。 Getとdata paramはうまく動作します。 – jleach

+1

jQueryは 'data'をGET用のクエリ文字列に変換します – DavidG

関連する問題