2013-07-10 30 views
0

昨天我有一個可用的Web API實現。我進來今天我的職務參數不再反序列化到我的實體對象Web API不會反序列化json post到EF類型

這裏是我的API控制器代碼:

public class DocBooksMDController : ApiController 
    { 

     private BoxEntities db = new BoxEntities(); 

     // POST api/DocBooksMD/ack 
     [HttpPost] 
     [ActionName("Acknowledge")] 
     public HttpResponseMessage MarkMessageAcknowledged(DocBooksMDMessage messageIn) 
     { 
      if (ModelState.IsValid) 
      { 
       // retrieve docBooksMDMessage 
       var query = from messages in db.DocBooksMDMessages 
          where messages.MessageControlID == messageIn.MessageControlID 
          select messages; 
       DocBooksMDMessage messageOut = query.FirstOrDefault(); 
       if (messageOut == null) 
       { 
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Message Control ID")); 
       } 

       // Set Acknowledgement and Feedback 
       messageOut.DateAcknowledged = DateTime.Now; 
       messageOut.DocBooksFeedback = messageIn.DocBooksFeedback; 
       db.SaveChanges(); 

       // send response 
       return Request.CreateResponse(HttpStatusCode.OK, messageOut); 
      } 
      else 
      { 
       return Request.CreateResponse(HttpStatusCode.BadRequest); 
      } 
     } 

     // POST api/DocBooksMD/read 
     [HttpPost] 
     [ActionName("Read")] 
     public HttpResponseMessage MarkMessageRead(DocBooksMDMessage messageIn) 
     { 
      if (ModelState.IsValid) 
      { 
       // retrieve docBooksMDMessage 
       var query = from messages in db.DocBooksMDMessages 
          where messages.MessageControlID == messageIn.MessageControlID 
          select messages; 
       DocBooksMDMessage messageOut = query.FirstOrDefault(); 
       if (messageOut == null) 
       { 
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentException("Invalid Message Control ID")); 
       } 

       // Set Read and Feedback 
       if (messageIn.DateRead == null) messageIn.DateRead = DateTime.Now; 
       messageOut.DateRead = DateTime.Now; 
       messageOut.DocBooksFeedback = messageIn.DocBooksFeedback; 
       db.SaveChanges(); 

       // send response 
       return Request.CreateResponse(HttpStatusCode.OK, messageOut); 
      } 
      else 
      { 
       return Request.CreateResponse(HttpStatusCode.BadRequest); 
      } 
     } 

     protected override void Dispose(bool disposing) 
     { 
      db.Dispose(); 
      base.Dispose(disposing); 
     } 
    } 
} 

這裏是我的實體類:

public partial class DocBooksMDMessage 
{ 
    public int ID { get; set; } 
    public int ExamSourceID { get; set; } 
    public string PatientLastName { get; set; } 
    public string PatientFirstName { get; set; } 
    public string PatientMRN { get; set; } 
    public string ExamAccession { get; set; } 
    public string ExamCode { get; set; } 
    public string ExamDescription { get; set; } 
    public string ReferringProviderCode { get; set; } 
    public string ReferringProviderNPI { get; set; } 
    public string ReferringProviderLastName { get; set; } 
    public string ReferringProviderFirstName { get; set; } 
    public string Message { get; set; } 
    public string MessageControlID { get; set; } 
    public System.DateTime DateSent { get; set; } 
    public Nullable<System.DateTime> DateAcknowledged { get; set; } 
    public Nullable<System.DateTime> DateRead { get; set; } 
    public string DocBooksFeedback { get; set; } 
} 

這裏的JSON請求昨天的工作,但不工作的今天:

Content-Type: application/json 
Host: tbd:8080 
Content-Length: 127 
{ 
    "MessageControlID":"65991775", 
    "DateAcknowledged":"2013-07-09T16:09:13.1564342-05:00", 
    "DocBooksFeedback":"Test Feedback" 
} 

我真的不知所措 如何進行。

這表明,該方法得到預期的請求體:

string body = Request.Content.ReadAsStringAsync().Result; 
+0

'下面是昨天工作的JSON請求,但今天不工作:' - 所以我想所有的現在剩下的工作是簡單地看提交歷史在你的源代碼控制在昨天和今天之間查看誰提交了非工作代碼。然後比較更改並最終修復或恢復到代碼的工作版本。 –

+0

是的 - 那會是這種情況。除非我在回家之前完成並沒有辦理入住手續。由於它只存在於我的筆記本電腦上,所以沒有其他人與此混淆。我燒了最近3個小時試圖弄清楚什麼改變了沒有用。我甚至從零開始重建項目無濟於事。 – JasonDWilson

+0

我真的很抱歉聽到這個消息。通常,當我有代碼的工作版本時,我會確保我永遠不會丟失它。這可能是您未來應該考慮的事情,以避免這些奇怪的情況。 –

回答

0

好了 - 這是官方的。我是一個白癡。當我在小提琴手工作時,我離開了請求標題的內容類型。現在的反序列化工作的罰款:

Content-Type: application/json