bma*_*man 7 c# model-binding asp.net-core-mvc asp.net-core
我不想Id在我的上绑定属性CustomerViewModel所以我添加了一个[BindNever]属性,但它不起作用.可能是什么解决方案?
我有以下内容:
CustomerController.cs
// PUT api/customers/5
[HttpPut("{id}")]
public async Task<IActionResult> Put([FromUri] int id, [FromBody]CustomerViewModel customer)
{
//Implementation
}
Run Code Online (Sandbox Code Playgroud)
CustomerViewModel
public class CustomerViewModel
{
[BindNever]
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我输入以下json.该id物业仍然被绑定
{
"id": 100,
"lastName": "Bruce",
"firstName": "Wayne",
"email": "bruce@gothamcity.com"
}
Run Code Online (Sandbox Code Playgroud)
Ral*_*ing 10
这篇博客文章是一个有趣的读物,并得出结论,[FromBody]注释"覆盖" BindBehaviourAttribute(BindNever是一个简单的专业化).该模型由正文中可用的所有数据填充(在本例中为您的JSON数据).
我不认为这是直观的,这个问题有一个很好的说法:
[BindRequired]自定义MVC模型绑定系统.这是它的目的,它按设计工作.
[FromBody]将受影响的属性或参数切换到输入格式的不同世界.每个输入格式化程序(例如Json.NET和一个小的MVC特定包装器)都可以被视为具有自己的自定义的独立系统.模型绑定系统不了解JSON(或任何其他)反序列化的细节.
获得的经验:BindNever在这种情况下不起作用.
什么是替代品?
解决方案1:编写一些自定义模型绑定代码.我自己没有这样做,但在MVC6中创建自定义模型绑定器的正确方法是什么?可能有帮助.
解决方案2:相当务实的一个
也许这个简单(但不是很好)的解决方法可以帮助你:
[HttpPut("{id}")]
public async Task<IActionResult> Put([FromUri] int id, [FromBody]CustomerViewModel customer)
{
customer.Id = 0;
//Implementation
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3774 次 |
| 最近记录: |