Los datos se envían desde el front-end al back-end. El cuerpo de la solicitud se crea así
var stateWithValue = {}; for (const item in self.pricings()) { state[item] = self.pricings()[item]["Comment"]; } var request = { generalComment: self.generalComment(), stateWithValue: stateWithValue };El cuerpo de la solicitud se ve así
{ generalComment: "test comment", stateWithValue: { Delaware: "Value1", California: "Value2", Texas: "Value3" } }El número de elementos en stateWithValue puede ser diferente para cada solicitud.
En el back-end, los datos se toman usando el atributo [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; } }En la pestaña de red (consola de desarrollo), la carga útil se ve así
generalComment: prueba el comentario general stateWithValue[Delaware]: Value1 stateWithValue[California]: Value2 stateWithValue[Texas]: Value3
El problema En el objeto de solicitud de back-end, StateWithValue.State StateWithValue.Value son ambos nulos.
También debe publicar la clase PublicRequest. Pero para su cuerpo de solicitud json, su clase debería ser
public class StateRequest : PublicRequest { public string generalComment{ get; set; } public Dictionary<string, string> stateWithValue { get; set; } }o cambiar
public class StateRequest : PublicRequest { public string GlobalComment { get; set; } public List<StateWithValue> StateWithValue { get; set; } }y javascript
var stateWithValue = []; for (const item in self.pricings()) { var stateWithValueItem={}; stateWithValueItem.State =item; stateWithValueItem.Value = self.pricings()[item]["Comment"]; stateWithValue.push(stateWithValueItem); }Para mapear el JSON:
{ generalComment: "test comment", stateWithValue: { Delaware: "Value1", California: "Value2", Texas: "Value3" } }Necesitaría usar el siguiente modelo de 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; } }Si desea mapear varios estados, considere usar una matriz en su lugar, algo como:
{ generalComment: "test comment", stateWithValue: [ State: "Delaware", Value: "Value1", State: "California", Value: "Value2", State: "Texas", Value: "Value3" ] }Pero su modelo necesitaría ser actualizado para verse así:
public class StateRequest : PublicRequest { public string GeneralComment { get; set; } public List<StateWithValue> StatesWithValues { get; set; } }Nota: Hay un error tipográfico con general vs Global en su código de muestra