c# - 在.net core API C#中解构具有1个属性的[FromBody]对象
问题描述
我刚刚将一个项目转换为 .net 核心,其中一项更改是我现在只能将 1 个 [FromBody] 属性传递给控制器操作。以前我将一个 JSON 对象传递到正文中,如下所示:
{
property1: 1,
property2: 2
}
并且可以像这样在控制器中接收这两个属性:
public doSomething([FromBody]int property1, [FromBody]int property2)
现在我必须为通过主体传递的参数创建一个新类:
public class DoSomethingParams {
public int property1;
public int property2;
}
public doSomething([FromBody]DoSomethingParams bodyParams)
这会创建更多代码,尤其是当我必须为调用传递 10 个或更多参数时,这对我来说效率非常低。
在 Javascript 中有解构操作,我可以使用上述对象,如下所示:
let property1 = {property1};
. C# 中是否有类似的替代方案?我在 C# v7 中阅读了关于元组解构的信息,但我不太确定它在这里对我有帮助(例如[FromBody](int property1, int property2)
,作为参数添加不起作用。(标识符预期错误))
除了为它创建一个类骨架之外,是否有更有效的方法来解构我传入的 JSON 对象?谢谢您的帮助!
解决方案
您需要创建一个自定义模型提供程序来实现这一点。检查这个包它就是这样做的:https ://github.com/m6t/M6T.Core.TupleModelBinder
您只需将自定义活页夹添加到您的活页夹提供者的第一个位置:
services.AddMvc(options =>
{
options.ModelBinderProviders.Insert(0, new TupleModelBinderProvider());
})
然后您将能够使用元组解构:
public doSomething((int property1, int property2, string other) bodyParams) {
// bodyParams.property1
// bodyParams.property2
// bodyParams.other
}
推荐阅读
- ansible - Ansible - 是否可以向库存中的主机添加标签?
- vb.net - 无法将 system.object[] 转换为 system.byte[],解决方法和变通方法
- c# - 如何按自定义顺序对列表进行排序
- ampl - 在 AMPL 中声明参数元组
- azure - Azure-AD B2C 可以使用手机号码作为用户名吗?
- python - Python 中的三引号(文档字符串)消息是否在输入 IDLE 以外的 IDE 时出现?
- python - 如何在 matplotlib python 中定义边界?
- python - 在间隔列上对 DataFrame 进行排序
- python - 如何在 tkinter 中读取条目的值
- c# - 服务器给出异常并且无法启动