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

相關問題