1

Nexmo SMS 서비스에 가입했으며 인바운드 SMS에 대한 콜백 URL을 제공합니다. SMS 수신 확인의 통지 할 때 POST 요청은 다음 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

관련 문제