我有一个移动应用程序发布到我的ASP.NET MVC 4 HttpPost
方法,每次收到数据时,它都没有收到正确的数据。
[HttpPost]
public void NewItems(Dictionary<string, List<Dictionary<string, string>>> newItemsDictionary)
{
}
我的RouteConfig设置如下:
routes.MapRoute(
name: "Default",
url: "{action}",
defaults: new { controller = "API", action = "Index" }
);
移动应用程序发布到URL https://api.test.com/NewItems,参数是带有一个密钥{J}的JSON编码字典,newItems
,值是字典数组([["user": "testUser1", "itemNumber": "123-45678"], ["user": "testUser2", "itemNumber": "456-7890"]]
)
我在POST方法中设置了try / catch块来捕获任何错误。当方法发布到时,它会进入catch块并告诉我newItemsDictionary
参数中不存在“ newItem ”键。参数中存在的密钥为:action
和controller
。操作键和控制键不包含任何值。
为什么会发生这种情况,我应该更改哪些内容才能获得正确的数据?
答案 0 :(得分:1)
这种情况正在发生,因为请求模型绑定适用于Dictionary,因此,如果您期望使用Dictionary,则可能会处理请求本身。
您应该将字典更改为ViewModel或您可以使用的内容。对于IE:
public class UserItemViewModel
{
public string User { get; set; }
public string ItemNumber { get; set; }
}
然后,您发布了一个UserItemViewModel列表。
答案 1 :(得分:1)
为什么需要等待需要以容易出错的方式处理的Dictionary
个对象列表。
如果将请求映射到strongly typed
对象,那会好得多。
public class ItemsViewModel
{
public string user;
public string itemNumber;
}
然后您的Api方法将如下所示:
[HttpPost]
public void NewItems(List<ItemsViewModel> newItems)
{
foreach(var item in newItems){
item.user... // And so on.
}
}