C# 将路由和正文中的多个参数绑定到ASP.NET Core中的模型
我在路由中提供一个ID(“…/api/mobile/registers/192”-192是ID),在PUT请求主体中提供其余参数。如何将它们绑定到具有所有参数的模型?问题是ID没有映射,它始终为0:C# 将路由和正文中的多个参数绑定到ASP.NET Core中的模型,c#,asp.net-core,model-binding,C#,Asp.net Core,Model Binding,我在路由中提供一个ID(“…/api/mobile/registers/192”-192是ID),在PUT请求主体中提供其余参数。如何将它们绑定到具有所有参数的模型?问题是ID没有映射,它始终为0: [HttpPut("registers/{id}")] public async Task ModifyPaymentRegister(PaymentRegisterModifyRequestVm model) { var result = await financeSe
[HttpPut("registers/{id}")]
public async Task ModifyPaymentRegister(PaymentRegisterModifyRequestVm model)
{
var result = await financeService.ModifyPaymentRegisterAsync(model, CurrentUserId.Value);
...
}
[BindProperties(SupportsGet=true)]
公共类PaymentRegisterModifyRequestVm
{
///
/// Идентификатор реестра
///
[FromRoute]
公共int Id{get;set;}
///
/// Описание реестра
///
[原文]
公共字符串说明{get;set;}
///
/// Тип модификации реестра
///
[原文]
公共付款ModifyType ModifyType{get;set;}
}
简而言之,您不能将对象
从路由传递到动作方法。
要将数据从路由传递到方法,路由参数名称必须与方法参数完全相同。如果要传递多个参数,请执行以下操作:
[HttpGet("api/v1/Users/{name}/{surname}")]
public string GetUser(string name,string surname)
{
return "Hello " + name + " " + surname;
}
[HttpPut("registers")]
public async Task ModifyPaymentRegister([FromBody]PaymentRegisterModifyRequestVm model)
此代码可用于以下URL:
localhost:3001/api/v1/Users/Hamed/Moghadasi
localhost:3001/api/v1/Users?name=Hamed&name=Moghadasi
body
。因此,通过使用[FromBody]
,您可以简单地将数据放入请求正文中,并在方法中轻松获取数据,您的代码应该如下所示:
[HttpGet("api/v1/Users/{name}/{surname}")]
public string GetUser(string name,string surname)
{
return "Hello " + name + " " + surname;
}
[HttpPut("registers")]
public async Task ModifyPaymentRegister([FromBody]PaymentRegisterModifyRequestVm model)
要想更深入,你可以点击链接。
祝您好运。您也必须将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);
...
}
那么,您试图通过使用相同的模型实现的目标似乎是不可能的: 查看msft文档: 以上的答案为您提供了另一种解决方案。 这是您真正想要的解决方案:
发布此信息,以便任何人都能找到解决此问题的真正答案/实现方法。不是一种解决方法,比如:public string MyMethod([FromBody]JObject data){}无论如何,主体参数已映射,但ID未映射。您应该将路由参数从
ID
更改为ID
是,此选项工作正常,谢谢。我想找到一种使用单一模型的方法。