1

Nexmo SMSサービスを購読しており、着信SMSのコールバックURLを提供しています。 SMSの受信を通知する際のポスト要求は次のようなJSON構造を与える:投稿要求にハイフネーションされた属性名を持つ.NETコアモデルのバインド

{ 
    "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. されているか、あなたのC#クラスからのものと一致するように、JSONペイロードのプロパティを更新します。

  2. JsonProperty(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

関連する問題