Yuv*_*man 4 c# asp.net-mvc asp.net-core-mvc .net-core
我有一个工作正常的MVC 5项目,我需要将该项目迁移到带有.NET核心的MVC 6.在设法调整所有工作之后,我遇到了一个问题:我的许多操作都接受了多个对象作为参数.模型绑定器MVC 5正在使用没有问题,但MVC 6似乎在这些操作的所有参数中都置零,我想这是MVC和WebAPI统一的一部分.我的问题是,如果它周围没有添加另一个请求包装器对象的模型库.
例如:
[HttpPost]
public ActionResult GetVersionData(OvlEnvironment environment, Pipeline pipeline)
{
BL.SetEnviromentVersion(pipeline, environment);
return PartialView("_Version", environment);
}
Run Code Online (Sandbox Code Playgroud)
在mvc 5项目中,ajax请求包含表单中的json数据
{ "environment" : {*Data...*},
"pipeline" : {*Data...*}
}
Run Code Online (Sandbox Code Playgroud)
被接受了.在mvc 6中,响应同一请求的两个对象看起来都是null.
谢谢
您必须为ASP.NET Core MVC Framework提供提示,即绑定到模型的数据可以在post请求的主体中找到.这是通过[FromBody]属性完成的.
[FromBody]:使用配置的格式化程序绑定请求正文中的数据.根据请求的内容类型选择格式化程序.
通过设计是不可能的,因为它被描述为多个参数绑定到一个JSON源此处.为了避免使用其他模型类,您可以使用这样的通用JObject:
[HttpPost]
public ActionResult GetVersionData([FromBody] JObject data)
{
var environment = data["environment"].ToObject<OvlEnvironment>();
var pipline = data["pipeline"].ToObject<Pipeline>();
BL.SetEnviromentVersion(pipeline, environment);
return PartialView("_Version", environment);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1118 次 |
| 最近记录: |