我对MVC项目有以下RESTful Action:
[Route("save")]
[HttpPut]
public ActionResult UpdateAllSettings(Dictionary<string,object> values){}
目前我无法向该Action发送值。我尝试使用以下JSON-Structure:
fancyData="'values':[{'key':'k1','value':'v1'}]";
$http({url:'myurl',data: fancyData}
但值始终为空。
我还尝试将Dictionary<string,object>
替换为List<KeyValuePair<string,object>>
,结果相同
答案 0 :(得分:2)
您必须告诉操作在请求正文中查找数据:
public ActionResult UpdateAllSettings([FromBody]Dictionary<string,object> values){}
答案 1 :(得分:0)
在这种情况下,最好使用values
属性修饰FromBody
参数。这样做的好处是,在创建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"));