วันอังคารที่ 9 กันยายน พ.ศ. 2557

มาเล่น WebAPI ให้รับ Request Json และ Response กลับไป json (ภาค 1)

เริ่มแรกที่ฝั่ง Client เขียน code ส่ง Request ดังนี้ ก่อน
 
var data2 = {
 
      "width": "1366",

      "heigth": "768",

      "map_id": "No",

      "DB": "LinkFreeDB"
};

$.ajax({

    type: "POST",

    url: http://localhost:32197/api/values,

    data: JSON.stringify(data2),

    contentType: "application/json; charset=utf-8",

    dataType: "json",

    success: function (data) {

            console.log('OK');

    }

});
 
ต่อมา มาเขียน code ที่ฝั่ง WebAPI โดยเขียน code รับ request ดังนี้
 
// POST api/values
public HttpResponseMessage Post(HttpRequestMessage req)
{      string str_req = req.Content.ReadAsStringAsync().Result;

      DataModel model = req.Content.ReadAsAsync<DataModel>().Result;

      //return new HttpResponseMessage()

     //{

          // Content = new StringContent("POST: Test message")

     //};

return Request.CreateResponse<DataModel>(HttpStatusCode.OK, model, System.Net.Http.Formatting.JsonMediaTypeFormatter.DefaultMediaType );
 
}
 
อธิบายในส่วน ของ code
 
บรรทัดแรกคือ การอ่าน ค่า ทั้งหมดที่รับ มา ผลลัพธ์ ที่ได้คือ ได้ json string ในรูปแบบ ดังนี้

{"width": "1366","heigth": "768","map_id": "No","DB": "LinkFreeDB" }
 
 บรรทัดที่ 2 คือ การอ่าน ค่า แล้วมาเก็บลงใน class model ที่ชื่อว่า DataModel โดยมีการสร้างไว้ ดังนี้
 class DataModel
{
 public string width { get; set;}
 public string heigth{get; set;}
 public string map_id { get; set;}
 public string DB { get; set;}
}

บรรทัดที่ 3 ส่วนที่ comment ไว้ คือ ตัวอย่างที่ต้องการ return ค่า string กลับไป แต่เราไม่ได้ใช้ เลย comment ทิ้งไว้

//return new HttpResponseMessage()

     //{

          // Content = new StringContent("POST: Test message")

     //};

บรรทัด สุดท้าย คือ การ return ค่า กลับไป ในรูปแบบ ของ Json ครับ
return Request.CreateResponse<DataModel>(HttpStatusCode.OK, model, System.Net.Http.Formatting.JsonMediaTypeFormatter.DefaultMediaType );

เมื่อเสร็จแล้วอย่าเพิ่งดีใจ ยังมีต่อ ภาค 2 ในส่วนของ client เมื่อได้รับ response ตอบกลับ ต้องจัดการอย่างไรกับ Json ที่ได้รับ
เดี่ยวผมจะเขียนต่อ ในภาค 2 ครับ

ขอบคุณครับ