MIME 유형이라고도 하는 미디어 유형은 데이터 조각의 형식을 식별합니다. HTTP에서 미디어 유형은 메시지 본문의 형식을 설명합니다. 미디어 유형은 유형과 하위 유형의 두 가지 문자열로 구성됩니다. 예를 들어 -
- 텍스트/html
- 이미지/png
- 애플리케이션/json
HTTP 메시지에 entity-body가 포함된 경우 Content-Type 헤더는 메시지 본문의 형식을 지정합니다. 이것은 수신자에게 메시지 본문의 내용을 구문 분석하는 방법을 알려줍니다.
클라이언트가 요청 메시지를 보낼 때 Accept 헤더를 포함할 수 있습니다. Accept 헤더는 클라이언트가 서버에서 원하는 미디어 유형을 서버에 알려줍니다.
수락:text/html,application/xhtml+xml,application/xml
미디어 유형은 Web API가 HTTP 메시지 본문을 직렬화 및 역직렬화하는 방법을 결정합니다. Web API에는 XML, JSON, BSON 및 formurlencoded 데이터에 대한 지원이 내장되어 있으며 미디어 포맷터를 작성하여 추가 미디어 유형을 지원할 수 있습니다.
MediaTypeFormatter는 JsonMediaTypeFormatter 및 XmlMediaTypeFormatter 클래스가 상속하는 추상 클래스입니다. JsonMediaTypeFormatter는 JSON을 처리하고 XmlMediaTypeFormatter는 XML을 처리합니다. 미디어 유형은 WebApiConfig 클래스의 Register 메서드에 지정됩니다. 미디어 유형을 가지고 놀 수 있는 몇 가지 예를 살펴보겠습니다.
학생 컨트롤러
예시
using DemoWebApplication.Models; using DemoWebApplication.Models; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class StudentController : ApiController{ List <Student> students = new List <Student>{ new Student{ Id = 1, Name = "Mark" }, new Student{ Id = 2, Name = "John" } }; public IEnumerable <Student> Get(){ return students; } } }
Accept 헤더 값에 관계없이 ASP.NET Web API Service에서 JSON만 반환하는 예 -
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.Remove(config.Formatters.XmlFormatter); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
위의 코드를 사용하여 ASP.NET Web API가 클라이언트 요청의 Accept 헤더 값에 관계없이 항상 JSON을 반환하도록 하는 XmlFormatter를 제거했습니다. 서비스가 XML이 아닌 JSON만 지원하도록 하려면 이 기술을 사용하십시오.
위의 출력에서 Accept 헤더 값 application/xml에 관계없이 Web API 서비스는 항상 JSON을 반환함을 알 수 있습니다.
Accept 헤더 값에 관계없이 ASP.NET Web API Service에서 XML만 반환하는 예 -
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.Remove(config.Formatters.JsonFormatter); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
위의 출력에서 Accept 헤더 값 application/json에 관계없이 Web API 서비스가 XML을 반환하는 것을 볼 수 있습니다.
브라우저에서 요청이 있을 때 ASP.NET Web API 서비스에서 XML 대신 JSON을 반환하는 예 -
브라우저에서 StudentController로 요청이 이루어지면 응답은 XML 형식입니다. 브라우저가 수락 헤더를 기본적으로 text/html로 보내기 때문입니다.
이제 브라우저에서 요청이 발생할 때 XML 대신 JSON 응답을 보내는 방법을 살펴보겠습니다.
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.MapHttpAttributeRoutes(); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
아래 출력은 수락 헤더 text/html에 관계없이 브라우저에서 요청이 실행될 때 응답이 JSON 유형임을 보여줍니다.