告知模型绑定 MVC 操作参数为 JSON



我正在使用上传控件将文件发送到 JsonResult,但我也在发送一个 JSON 字符串作为第二个参数。这一切都与内容类型一起发布:多部分/表单数据;

[HttpPost]
public JsonResult UploadDocument(HttpPostedFileBase file, DocumentViewModel model)
{ ... }

我知道如果内容类型设置为应用程序/json,MVC 能够直接绑定到视图模型,但我认为在这种情况下我无法设置它。

有什么方法可以让 MVC 自动将我发布的 json 字符串绑定到模型?

这不可能开箱即用。您必须手动反序列化 JSON 字符串参数,该参数将从控制器操作中的视图模型请求中读取,或者为其编写自定义模型绑定器来完成这项工作。理想情况下,您不应该将模型数据作为 JSON 字符串发布,而应该尊重您指定的内容类型:multipart/form-data 。因此,处理此方案的正确方法是修改发送请求的客户端代码,以便遵循内容类型。

由于我无法更改内容类型,我发现这个博客正是我所需要的。

"...我们的整个请求流(数据)不会是 JSON 字符串。只有来宾参数将作为 json 字符串提供..."

http://ishwor.cyberbudsonline.com/2012/07/fun-with-aspnet-mvc-3-custom-json-model-binder.html

最新更新