2016-05-04 73 views
0

我正在設置一個簡單的MVC項目,因爲我想擴展我在Umbraco範圍之外的知識,在那裏我通常會執行此類項目。傳遞給WebApi方法的參數在到達方法體時爲空

我對WebApi很熟悉,但似乎無法讓它在這種情況下工作。

我有我的觀點一個datepicker被初始化與下面的JavaScript:

$('#id-tour_0').datepicker({ 
       changeMonth: true, 
       changeYear: true, 
       showOn: "button", 
       buttonImage: "Content/themes/base/images/icon_calendar.gif", 
       buttonImageOnly: true, 
       onSelect: function (date) { 
        $.ajax({ 
         url: '/api/tour/requesttours', 
         type: 'POST', 
         data: JSON.stringify(date), 
         dataType: 'json', 
         success: function (data){ 
          console.log(data); 
         } 
        }); 
       } 
      }); 

時在日期選擇器中進行選擇這則帖子下面的WebAPI方法:

public class TourController : ApiController 
    { 
     [System.Web.Http.AcceptVerbs("GET", "POST")] 
     public string RequestTours([FromBody] String request) 
     { 
      return request; 
     } 
    } 

隨着我的WebApiConfig.cs設置如下:

public static void Register(HttpConfiguration config) 
     { 
      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{action}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 

但是,當我brea kpoint我的WebApi方法我可以看到這個請求是空的。爲什麼是這樣的,我怎樣才能讓它接收我的Javascript發佈的值?

N.B.我已經checkeed在Firebug和正確的日期被正確地發佈到方法

enter image description here

+0

如何設置您的數據值幾乎爲空,您發送它的位置必須用參數名稱指定,如果有數據:'{request:''+ date.Date +'「}' –

回答

2

之後的參數名稱應映射到函數參數的名稱在類文件

因此,創建像對象這

var dateX = new Object(); 
dateX.request = date.Date; 

然後在你的Ajax調用發送這個對象

data: JSON.stringify(dateX), 

,或者直接通過這樣

data: '{request:"'+ date.Date +'"}' 
+0

這根本不起作用。 – jezzipin

0

對象我結束了執行以下操作:

$('#id-tour_0').datepicker({ 
       changeMonth: true, 
       changeYear: true, 
       showOn: "button", 
       buttonImage: "Content/themes/base/images/icon_calendar.gif", 
       buttonImageOnly: true, 
       onSelect: function (date) { 
        $.ajax({ 
         url: '/api/tour/requesttours', 
         type: 'POST', 
         data: {Date: date}, 
         dataType: 'json', 
         success: function (data){ 
          console.log(data); 
         } 
        }); 
       } 
      }); 

然後我在我映射請求參數到我的C#代碼中創建一個新的對象:

public class TourController : ApiController 
    { 
     public string RequestTours([FromBody] DateRequest request) 
     { 
      return request.Date; 
     } 
    } 

    public class DateRequest 
    { 
     public string Date { get; set; } 
    }