如何解决将路线和正文中的多个参数绑定到ASP.NET Core中的模型
我在路由中提供一个ID(“ ... / api / mobile / registers / 192”-192是ID),并在PUT请求的正文中提供其余参数。如何将它们绑定到具有所有参数的模型?问题是ID不会映射,它始终为0:
[HttpPut("registers/{id}")]
public async Task ModifyPaymentRegister(PaymentRegisterModifyRequestVm model)
{
var result = await financeService.ModifyPaymentRegisterAsync(model,CurrentUserId.Value);
...
}
[BindProperties(SupportsGet = true)]
public class PaymentRegisterModifyRequestVm
{
/// <summary>
/// Идентификатор реестра
/// </summary>
[FromRoute]
public int Id { get; set; }
/// <summary>
/// Описание реестра
/// </summary>
[FromBody]
public string Description { get; set; }
/// <summary>
/// Тип модификации реестра
/// </summary>
[FromBody]
public PaymentModifyType ModifyType { get; set; }
}
解决方法
简短的答案是,您不能将object
从路由传递到操作方法。
为了将数据从路由传递到方法, 路由参数名称必须与方法参数完全相同 。如果您想传递多个参数,则应如下所示:
[HttpGet("api/v1/Users/{name}/{surname}")]
public string GetUser(string name,string surname)
{
return "Hello " + name + " " + surname;
}
此代码可用于以下网址:
-
localhost:3001/api/v1/Users/Hamed/Moghadasi
-
localhost:3001/api/v1/Users?name=Hamed&surname=Moghadasi
但,我想说的是,将复杂数据对象发送到API的正确方法是使用请求body
。因此,您可以简单地将数据放入请求正文中,并使用[FromBody]
轻松地将其放入方法中,您的代码应如下所示:
[HttpPut("registers")]
public async Task ModifyPaymentRegister([FromBody]PaymentRegisterModifyRequestVm model)
要深入,您可以点击this链接。 祝你好运。
,您还必须将 id作为参数传递。
公共异步任务ModifyPaymentRegister( int id, PaymentRegisterModifyRequestVm模型)
默认情况下,aspnet隐藏符号的使用,因此第二个参数类似于[FromBody] PaymentRegisterModifyRequestVm模型)
尝试一下:
[HttpPut("registers/{id}")]
public async Task ModifyPaymentRegister(int id,PaymentRegisterModifyRequestVm model)
{
var result = await financeService.ModifyPaymentRegisterAsync(model,CurrentUserId.Value);
...
}
,
你想要实现的目标,通过使用相同的模型,似乎是不可能的:
以上所有答案都为您提供了替代解决方案。 不过,这正是您真正要寻找的解决方案:
ASP.NET Core MVC Mixed Route/FromBody Model Binding & Validation
发布此信息,以便如果有人跳到这个问题上,就可以找到真正的答案/实现来实现这一目标。不是解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。