Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

Asp.Net WebAPI C#에서 MIME 유형을 어떻게 지정합니까?

<시간/>

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만 지원하도록 하려면 이 기술을 사용하십시오.

Asp.Net WebAPI C#에서 MIME 유형을 어떻게 지정합니까?

위의 출력에서 ​​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 }
      );
   }
}

Asp.Net WebAPI C#에서 MIME 유형을 어떻게 지정합니까?

위의 출력에서 ​​Accept 헤더 값 application/json에 관계없이 Web API 서비스가 XML을 반환하는 것을 볼 수 있습니다.

브라우저에서 요청이 있을 때 ASP.NET Web API 서비스에서 XML 대신 JSON을 반환하는 예 -

브라우저에서 StudentController로 요청이 이루어지면 응답은 XML 형식입니다. 브라우저가 수락 헤더를 기본적으로 text/html로 보내기 때문입니다.

Asp.Net WebAPI C#에서 MIME 유형을 어떻게 지정합니까?

이제 브라우저에서 요청이 발생할 때 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 유형임을 보여줍니다.

Asp.Net WebAPI C#에서 MIME 유형을 어떻게 지정합니까?