ASP.Net: สร้างโปรเจ็กส์แบบ WebApi

  1. สร้างโปรเจ็กส์ WepApi
  2. รันโปรเจ็กส์
  3. ลองเรียกแบบ GET
  4. กำหนดให้คืนค่าแบบ JSON ไม่คืนค่าแบบ XML

ASP.NET Web API

1.สร้างโปรเจ็กส์ WepApi

เลือกเมนู
File > New > Project …

เลือก
Visual C# > Web > ASP.NET Web Application (.NET Framework)

ตั้งชื่อโปรเจ็กส์ WebApi

เลือก Web API

2.รันโปรเจ็กส์

กด F5
http://localhost:57067/

หน้าแรก

คลิกที่เมนู API จะแสดงรายการ API
http://localhost:57067/Help

โค๊ดที่เกี่ยวกับ WebApi นี้อยู่ที่ Controllers > ValuesController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace WebApi1.Controllers
{
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
        public void Post([FromBody]string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
    }
}

3.ลองเรียกแบบ GET

3.1 ลองเรียกไปที่ http://localhost:57067/api/Values จะได้

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <string>value1</string>
  <string>value2</string>
</ArrayOfstring>

จากหน้า ASP.NET Web API Help Page เมื่อคลิกดูที่ GET api/Values จะได้

สังเกตุว่า Response Formats มีทั้งแบบ JSON และ XML

3.2 ลองเรียกไปที่ http://localhost:57067/api/Values/1 จะได้

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">value</string>

จากหน้า ASP.NET Web API Help Page เมื่อคลิกดูที่ GET api/Values/{id} จะได้

สังเกตุว่า Response Formats มีทั้งแบบ JSON และ XML เหมือนกับ 3.1

ลองเรียกจาก Browser บน Notebook ได้ค่าคืนมาเป็น application/xml
แต่ลองเรียกจากอย่างอื่นที่ต้องการเป็น application/json ก็ใช้งานได้
เลยเข้าใจว่า WebApi ที่สร้างขึ้นมานี้ สามารถคืนค่าได้ทั้ง application/xml และ application/json

แต่ก็เป็น REST นะ ไม่ใช่ SOAP

4.กำหนดให้คืนค่าแบบ JSON ไม่คืนค่าแบบ XML

แก้ไขไฟล์ App_Start > WebApiConfig.cs

using System.Net.Http.Formatting;
using System.Web.Http;
 
namespace WebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            config.Formatters.Clear();
            config.Formatters.Add(new JsonMediaTypeFormatter());
 
            // Web API routes
            config.MapHttpAttributeRoutes();
 
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

บรรทัดที่ 11-12: กำหนดให้คืนค่าเฉพาะ application/json

ลองเรียกไปที่ http://localhost:57067/api/Values จะได้

["value1","value2"]

จากหน้า ASP.NET Web API Help Page เมื่อคลิกดูที่ GET api/Values จะได้

จะเห็นได้ว่า Response Formats เหลือแต่ JSON ละ