Me encuentro con un problema al publicar un JSON en un método de controlador .NET 6. El modelo no se está completando con los datos de la publicación.
Por ejemplo, un fragmento de JavaScript que envía los datos:
let content = { asset: { id: item.dataset.itemId, title: item.dataset.itemTitle, contentType: item.dataset.contentType, contentAction: item.dataset.itemAction, modified: item.dataset.modifiedDate, created: item.dataset.createdDate }, user: { username: userElement.dataset.username }, interacted: moment().format('YYYY-MM-DD HH:mm:ss') } let response = fetch('/Analytics/Log', { method: 'POST', mode: 'same-origin', cache: 'no-cache', credentials: 'same-origin', headers: { 'Content-Type': 'application/json; charset=utf-8' }, redirect: 'follow', referrerPolicy: 'no-referrer', body: JSON.stringify(content) });... esto envía al siguiente Controlador:
[HttpPost, HttpOptions] [Route("/Analytics/Log")] public IActionResult Log([FromBody] Content body) { AnalyticsExtensions.LogActivity(body); } desafortunadamente, body siempre aparece como nulo. Si cambio el tipo a dinámico, veo que un objeto se encuentra con datos, por lo que los datos se envían, pero no se cargan en el modelo.
... y aquí hay un fragmento del modelo:
public class Content { [JsonProperty("asset")] public Asset Asset { get; set; } [JsonProperty("user")] public User User { get; set; } [JsonProperty("interacted")] public DateTime Interacted { get; set; } } public class Asset { [JsonProperty("id")] public Guid ID { get; set; } [JsonProperty("title")] public string Title { get; set; } [JsonProperty("contentType")] public string ContentType {get; set; } [JsonProperty("contentAction")] public string ContentAction { get; set; } [JsonProperty("modified")] public DateTime Modified { get; set; } [JsonProperty("created")] public DateTime Created { get; set; } } public class User { [JsonProperty("username")] public string Username { get; set; } }Revisé errores ortográficos obvios y decoré el modelo con decoraciones JsonProperty, pero aún nada...
Me doy cuenta de que esto es probablemente algo estúpido, pero se agradecería un par de ojos extra.
En realidad, encontré que el problema estaba en esta línea:
interacted: moment().format('YYYY-MM-DD HH:mm:ss')
Esto no se considera un formato de fecha válido para JSON.
Cambiarlo a lo siguiente parece haber corregido el problema:
interacted: moment().format('YYYY-MM-DDTHH:mm:ss')