无法使用 [FromBody] 获取键值对的值

Can not get a value of key-value pair using [FromBody]

数据从前端发送到后端。请求正文是这样创建的

var stateWithValue = {};

for (const item in self.pricings()) {
    state[item] = self.pricings()[item]["Comment"];
}

var request = {
    generalComment: self.generalComment(),
    stateWithValue: stateWithValue
};

请求正文如下所示

{
generalComment: "test comment",
stateWithValue:
{
  Delaware: "Value1",
  California: "Value2",
  Texas: "Value3"
}
}

每个请求的 stateWithValue 中的元素数量可能不同。

后台使用[FromBody]属性获取数据

public WebApiResponseGeneric<EmptyResponse> State([FromBody] StateRequest request)

StateRequest.cs

public class StateRequest : PublicRequest
{
    public string GlobalComment { get; set; }
    public StateWithValue StateWithValue { get; set; }
}
public class StateWithValue
{
    public string State { get; set; }
    public string Value { get; set; }
}

在网络选项卡(开发控制台)中,有效负载如下所示

generalComment: test general comment stateWithValue[Delaware]: Value1 stateWithValue[California]: Value2 stateWithValue[Texas]: Value3

问题 后端请求对象中,StateWithValue.State StateWithValue.Value 均为null.

你也必须 post PublicRequest class。但是对于您的请求正文 json,您的 class 应该是

public class StateRequest : PublicRequest
{
    public string generalComment{ get; set; }
    public Dictionary<string, string> stateWithValue { get; set; }
}

或更改

public class StateRequest : PublicRequest
{
    public string GlobalComment { get; set; }
    public List<StateWithValue> StateWithValue { get; set; }
}

和javascript

var stateWithValue = [];

for (const item in self.pricings()) {
    var stateWithValueItem={};
    stateWithValueItem.State =item;
    stateWithValueItem.Value = self.pricings()[item]["Comment"];
   
 stateWithValue.push(stateWithValueItem);
    
}

为了映射JSON:

{
generalComment: "test comment",
stateWithValue:
{
  Delaware: "Value1",
  California: "Value2",
  Texas: "Value3"
}
}

您需要使用以下 C# 模型

public class StateRequest : PublicRequest
{
    public string GeneralComment { get; set; }
    public StateWithValue StateWithValue { get; set; }
}
public class StateWithValue
{
    public string Dalaware { get; set; }
    public string California { get; set; }
    public string Texas { get; set; }
}

如果您想映射多个状态,请考虑改用数组,例如:

{
generalComment: "test comment",
stateWithValue:
[
  State: "Delaware", Value: "Value1",
  State: "California", Value: "Value2",
  State: "Texas", Value: "Value3"
]
}

但是您的模型需要更新为如下所示:

public class StateRequest : PublicRequest
{
    public string GeneralComment { get; set; }
    public List<StateWithValue> StatesWithValues { get; set; }
}

注意:您的示例代码中的 general 与 Global 存在拼写错误