首页 > 解决方案 > 将自定义对象作为参数传递给控制器

问题描述

我是 ASP Net Core 的新手。我在这个框架中制作的 API Rest 中制作了一些基本的 CRUD。现在我必须创建一个可以接收 3 个或更少属性的新端点。属性 1、属性 2、属性 3。根据我到目前为止的工作方式,控制器必须接收对象作为参数,但在这种情况下,没有实体或 DTO 具有此属性。我用字典做的,通过这种方式:

[HttpPost]
public async Task<IActionResult> Add(Dictionary<string, dynamic> parameters)
{
    var Respuesta =  _prLiquidacionesService.Liquidar(parameters);
    return Ok(Respuesta);
}

但我不知道这是否是最好的方法。也许更好地定义一个名为 LiquidacionRequest 的请求实体并在那里定义我需要的属性?

请问你能给我你的意见吗?

标签: c#asp.net-coreasp.net-core-3.1

解决方案


更新的答案

您可以使用带有 a 的模型绑定Dictionary,只需将查询字符串设为以下格式:

从查询

https://Example.com/Controller/Action?parameters[key]=value1&parameters[key2]=value2&parameters[key3]=value3

从身体

老实说,如果Dictionary没有自定义模型绑定器,我无法使其工作,但有一个适当的替代品List<KeyValuePair<string, dynamic>>可以公开类似的 API。

Json 数据样本:

[
    {
        "Key": "asd",
        "Value": 123
    },
    {
        "Key": "dsa",
        "Value": 321
    }
]

行动:

[HttpPost]
public async Task<IActionResult> Add([FromBody] List<KeyValuePair<string, dynamic>> parameters)
{
    var Respuesta =  _prLiquidacionesService.Liquidar(parameters);
    return Ok(Respuesta);
}

如果您的方法需要一个Dictionary简单的演员表就可以完成这项工作:

parameters.ToDictionary(x => x.Key, x => x.Value);

有关更多示例,请参阅文档。 MSDN 模型绑定


推荐阅读