2012-11-21 33 views
-1
var assetimage_id = $(this).closest(".assetImageWrapper").attr("data-assetimage_id"); 

    var dataToSend = JSON.stringify({ "Asset_ID": assetimage_id, "Description": $(this).val() }); 
     $.ajax({ 
      url: "/api/Assets/UpdateDescription", 
      type: "PUT", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      data: dataToSend, 
      success: function (data) { 
       alert("success"); 
      } 
    }); 

這裏是它應該打的方法。HTTP Put在MVC 4 Web API中不適用於我。我不斷收到404

[HttpPut] 
     public Asset UpdateDescription(int Asset_ID, string Description) 
     { 
      return new AssetsService().UpdateAssetDescription(Asset_ID, Description); 
     } 

什麼看起來不重要?該方法在名爲Assets的Web API控制器中進行設置。所有其他方法都可以正常工作(GETS,POSTS)。這是當我通過在Visual Studio 2012中擊中F5來運行它時,所以沒有更改IIS配置。 Api路由是默認路由。

而且我的web.config支持所有動詞:

回答

0

默認情況下,簡單的類型,如上述,也 '資產_ID' 字符串 '說明' 從烏里綁定。在你的情況下,你似乎在內容中發送內容,所以你需要相應地改變你的api簽名。順便說一句,你的動作也不能有多個FromBody參數。

對於一個複雜的模型,您需要創建包含這些視圖模型:

一旦創建:

public class AssetEstimatedValueUpdate 
    { 
     public int Asset_ID { get; set; } 
     public string EstimatedValue { get; set; } 
    } 

然後,你可以通過它和一切運作良好。

[HttpPut] 
     public Asset UpdateDescription(AssetDescriptionUpdate _AssetDescriptionUpdate) 
     { 
      return new AssetsService().UpdateAssetDescription(_AssetDescriptionUpdate.Asset_ID, _AssetDescriptionUpdate.Description); 
     } 
+0

不確定你的意思。這個改動會是什麼? – Shane

+0

你需要一個包裝器對象,比方說一個叫做AssetInfo的類,AssetId和Desription就是它的屬性。然後,您將修改您的操作簽名以訪問一個參數AssetInfo。由於這是一種複雜類型,因此默認情況下,Web API會從請求正文中讀取內容並將數據綁定到屬性。 –

+0

另一個解決方案是簡單地在URL中傳遞你的'Asset_ID'和'Description',因爲Kiran提到這些參數是簡單類型的,並且默認綁定在Uri查詢字符串參數中(而不是在請求體中)。例如,您的ajax調用的url將如下所示:「/ api/Assets/UpdateDescription?AssetID =」+ assetimage_id +「&Description =」+ $(this).val(), –

相關問題