我希望在向ASP.Net MVC控制器发出POST请求时,能够发送JSON而不是标准的查询字符串。我的前端工作正常运行(构建并提交我的JSON对象)。
问题出现在控制器方面,MVC框架默认提供的ModelBinders不支持此操作。
我看到了一些解决方法,其中之一是应用一个过滤器,将对象作为参数传递,使用JSON库对其进行反序列化,并将其添加到操作参数中。但这不是理想的方法。
另一种更好的方法是使用自定义Model Binder。但我看到的所有方式都假定您只有一个模型,而且它将是一个类而不是一个变量。如果您有多个模型,则会出现问题。
有没有其他人遇到过这个问题?我想到的一个想法是,如果我可以简单地覆盖MVC处理FormCollection的方式并在那里拦截,将值添加到集合中,然后希望MVC可以以正常方式完成剩下的工作。请问这是否可行?
我认为关键问题在于,我的问题不在于绑定,因为我的视图模型与以前的模型没有任何区别。问题在于从JSON Post获取值。
如果我没错的话,MVC从QueryString中获取值并将其放入表单集合中,然后用于ModelBinding。那么正确的方法不应该是更改FormCollection的分配方式吗?
操作示例:
public ActionResult MyFirstAction(Int32 ID, PersonObject Person, ClassObject ClassDetails)
{
//etc
}
正常的数据绑定可以工作,但JSON格式无法绑定,而且所有模型绑定的示例也都无法使用。目前我能想到的最好解决方法是将对象转换为字典,并循环遍历每个参数并进行匹配。这似乎不太理想。