2014-02-16 69 views
0

我有一個問題,我似乎無法弄清楚。我想提出以下Ajax調用:jquery ajax沒有發佈數據

var dataArray = { table: "Products" }; 

     $.ajax({ 
      url: uri, 
      type: "POST", 
      cache: false, 
      datatype: "json", 
      data: dataArray 
     }) 
     .done(function(msg) { 
       alert("Data Saved"); 
      }) 
     .fail(function() { 
      alert("error"); 
     }); 

我遇到的問題是,這似乎並沒有被髮送我有什麼在DataArray中,以我的Web API控制器,並保持着以下響應回來:

{"Message":"No HTTP resource was found that matches the request URI 'http://myURI'.","MessageDetail":"No action was found on the controller 'MYController' that matches the request."} 

令我困惑的是我可以像這樣做一個GET,並且它返回數據正常。另外,如果我只是平板電腦追加查詢字符串到像這樣的

http://myURI?table=Products 

然後POST工作正常。我可以這樣做,但我很好奇我在做什麼我的錯誤在上面。謝謝!

這就是我的控制器。我只是基本上試圖驗證我現在可以得到它。

public void Post(string table) 
    { 
     string beingHit = "We did it!"; 
    } 
+0

'datatype:json,' - 你需要引用JSON位 - 但是如果你說你可以在你的查詢字符串上有一個GET變量時正確地POST到你的端點,你需要評估你的API控制器正在處理請求方法 - 並在此處發佈一些代碼,以便我們可以爲您提供幫助 –

+0

您還需要對數據進行jsonify。 $ .ajax不會爲你自動完成。使用類似https:// github的東西。com/douglascrockford/JSON-js –

+0

@scrowler請參閱http://stackoverflow.com/questions/13735869/datatype-application-json-vs-json – Musa

回答

0

這個問題並不一定是說你沒有發送數據到Web API。這是Web API不能識別它。

在決定什麼樣的行動來對抗匹配的要求,以及如何綁定參數,下面的規則默認應用被Web API(從the documentation on asp.net):

默認的Web API使用以下規則綁定參數:

  • 如果參數是「簡單」類型,Web API將嘗試從URI獲取值。簡單類型包括.NET原始類型(int,bool,double等),加上TimeSpan,DateTime,Guid,decimal和string,以及任何類型的轉換器都可以從字符串轉換。 (稍後關於類型轉換器的更多信息。)
  • 對於複雜類型,Web API嘗試使用媒體類型格式化程序從消息正文中讀取值。

你的情況,你想綁定一個「簡單」的類型參數(string)。你已經看到它通過querystring工作。但是,如果您嘗試將其作爲請求主體的一部分提交。它將不會被Web API默認識別。

爲了獲得網絡API來識別請求的身體參數,你需要使用FromBody屬性表明此在操作簽名:

public void Post([FromBody] string table) 
{ 
    string beingHit = "We did it!"; 
} 

這將告訴網頁API尋找在參數值的請求主體處(請注意,您只能在Action中將其用於一個參數,因此對於這樣的簡單類型,將它們包含在查詢字符串中可能會更好,而[FromBody]非常適合綁定包含在請求正文中的複雜類型稱爲Json)。

+0

非常感謝您的解釋,並鏈接到文檔。真的解釋得很好,並幫助我克服了錯誤。然後我只是使用查詢字符串。 – chuckw87