2016-03-08 45 views
0

我有一個MVC項目下面的RESTful操作:的屬性路由使用字典作爲輸入參數

[Route("save")] 
[HttpPut] 
public ActionResult UpdateAllSettings(Dictionary<string,object> values){} 

目前我堅持送價值到行動。我嘗試使用以下JSON結構:

fancyData="'values':[{'key':'k1','value':'v1'}]"; 
$http({url:'myurl',data: fancyData} 

但值始終爲空。

我也試圖通過List<KeyValuePair<string,object>>具有相同的結果替換Dictionary<string,object>

+0

fancyData不包含有效的JSON –

+1

@ T-moty只是想寫一個更復雜的真實世界數據的簡單版本。現在應該罰款 –

+0

是的。據我所知,默認的模型聯編程序搜索區分大小寫的屬性名稱匹配:嘗試將您的json屬性名稱更改爲駱駝大小寫。也請嘗試用斷點調試該服務,並查看發送值時發生的情況(this.Request on controller)。 –

回答

2

你必須告訴動作來尋找數據請求體:

public ActionResult UpdateAllSettings([FromBody]Dictionary<string,object> values){} 
0

在這種情況下,它會更好,你使用FromBody屬性修飾values參數。這給您帶來的好處是,在創建PUT請求時,您可以將JSON作爲內容添加到請求中。

httpClient.PutAsync("URL", new StringContent("YOUR JSON HERE", 
              Encoding.UTF8, 
              "application/json")); 

有更好的可重用性,從剛剛的StringContent派生和創造JSONContent級:

public sealed class JsonContent : StringContent 
{ 
    public JsonContent(object content) 
     : base(JsonConvert.SerializeObject(content)) 
    { 
    } 

    public JsonContent(object content, Encoding encoding) 
     : base(JsonConvert.SerializeObject(content), encoding, "application/json") 
    { 
    } 
} 

注意我用Json.NET作爲JSON庫

現在你可以修改它可以:

httpClient.PutAsync("URL", new JsonContent(yourDictionaryHere, 
              Encoding.UTF8, 
              "application/json"));