首页 > 解决方案 > 在.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 对象?谢谢您的帮助!

标签: c#asp.net-coredestructuring

解决方案


您需要创建一个自定义模型提供程序来实现这一点。检查这个包它就是这样做的: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
}

推荐阅读