1

我已经订阅了Nexmo短信服务,他们提供的短信接收回调URL。通知短信回执时POST请求提供了以下JSON结构:.NET核心模型在POST请求用连字符属性名称结合

{ 
    "msisdn": "441632960960", 
    "to": "441632960961", 
    "messageId": "02000000E68951D8", 
    "text": "Hello7", 
    "type": "text", 
    "keyword": "HELLO7", 
    "message-timestamp": "2016-07-05 21:46:15" 
} 

使用下面的代码片段,我可以将所有的字段除了“消息时间戳”映射到我的SmsReceipt。没有填充消息时间戳字段。

public class SmsReceipt 
{ 

    public string msisdn { get; set; } 
    public string to { get; set; } 
    public string messageId { get; set; } 
    public string text { get; set; } 
    public string type { get; set; } 
    public string keyword { get; set; } 
    public string messagetimestamp { get; set; } 
    public string messageTimestamp { get; set; } 
    public string message_timestamp { get; set; } 
} 

[HttpPost("inboundsms")] 
public async Task<IActionResult> Post([FromBody] SmsReceipt receipt) 
{ 
    return StatusCode(200); 
} 

我想这同样适用于传入的请求与其他特殊字符,如'。'任何想法不胜感激。

回答

2

您的属性名应与在数据属性名被发送。看起来你的有效载荷属性名称是message-timestamp。您无法创建其中包含-的C#属性。所以你的选择是

  1. 要么更新您的JSON有效载荷属性,以匹配从你的C#类的一个。

  2. JsonProperty(From Newtonsoft.Json)装饰您的C#类,其中指定发布数据中的哪些属性应映射到此属性。

此外,我建议使用DateTime类型。该类型是为了处理日期时间值而创建的。

public class SmsReceipt 
{ 
    public string Msisdn { get; set; } 
    public string To { get; set; } 
    public string MessageId { get; set; } 
    public string Text { get; set; } 
    public string Type { get; set; } 
    public string Keyword { get; set; } 

    [JsonProperty("message-timestamp")] 
    public DateTime Messagetimestamp { get; set; } 
} 
+0

选项2的作品像魅力谢谢。我不知道Newtonsoft.Json是如此紧密地集成到.NET核心中。我现在将这个属性保存为一个字符串,因为即使DateTime转换爆炸,我仍然对接受收据抱有偏见。 – vipes

相关问题