Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将路由和正文中的多个参数绑定到ASP.NET Core中的模型_C#_Asp.net Core_Model Binding - Fatal编程技术网

C# 将路由和正文中的多个参数绑定到ASP.NET Core中的模型

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

我在路由中提供一个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)]
公共类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
但是,我想说,向API发送复杂数据对象的正确方法是使用request
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
是,此选项工作正常,谢谢。我想找到一种使用单一模型的方法。