2

我订阅了 Nexmo SMS 服务,他们为入站 SMS 提供回调 URL。当收到短信通知时,post 请求给出以下 Json 结构:

{
  "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);
}

我想这同样适用于带有其他特殊字符(例如“。”)的传入请求。任何想法都非常感谢。

4

1 回答 1

4

您的属性名称应与正在发送的数据中的属性名称匹配。看起来您的有效负载属性名称是message-timestamp. 您不能创建包含 a 的 C# 属性-。所以你的选择是

  1. 更新您的 json 有效负载属性以与您的 C# 类中的一个匹配。

  2. 使用(来自 Newtonsoft.Json)装饰您的 C# 类,JsonProperty您可以在其中指定应将发布数据中的哪些属性映射到此属性。

我也建议使用该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; }
}
于 2016-12-31T17:42:53.290 回答