c# - 将自定义对象作为参数传递给控制器
问题描述
我是 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 的请求实体并在那里定义我需要的属性?
请问你能给我你的意见吗?
解决方案
更新的答案
您可以使用带有 a 的模型绑定Dictionary
,只需将查询字符串设为以下格式:
从查询
https://Example.com/Controller/Action?parameters[key]=value1¶meters[key2]=value2¶meters[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 模型绑定
推荐阅读
- kubernetes - Kubectl - 仅列出用户可以访问的命名空间
- c# - 在所需位置实例化预制件时需要帮助
- ansible - 如何使用带有序列和列表的嵌套循环以及如何在 Ansible 中绕过花括号
- javascript - 如何为 touchstart / touchend 事件禁用按钮?
- html - 表格列中不支持相对填充吗?
- android - 封装子组件
- angular - 如果设置为零或空字符串,则类实例中的初始化属性为“未定义”
- python - 使用 Spacy 按标记拆分文本
- objective-c - 如何检查应用程序是否具有辅助功能访问权限?
- powershell - Get-ADUser:无法验证参数“身份”。参数为空