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

Asp.Net webAPI C#의 콘텐츠 협상이란 무엇입니까?

<시간/>

내용 협상은 사용 가능한 표현이 여러 개 있을 때 주어진 응답에 가장 적합한 표현을 선택하는 프로세스입니다. 즉, 요청의 Accept 헤더 값에 따라 서버가 응답을 보냅니다. HTTP에서 콘텐츠 협상을 위한 기본 메커니즘은 다음과 같은 요청 헤더입니다. -

수락 − "application/json", "application/xml"과 같은 응답에 허용되는 미디어 유형 또는 "application/vnd.example+xml"과 같은 사용자 지정 미디어 유형

Accept-Charset − UTF-8 또는 ISO 8859-1과 같이 허용되는 문자 세트.

인코딩 수락 − gzip과 같이 허용되는 콘텐츠 인코딩.

허용 언어 − "en-us"와 같은 선호하는 자연어.

서버는 HTTP 요청의 다른 부분도 볼 수 있습니다. 예를 들어 요청에 AJAX 요청을 나타내는 X-Requested-With 헤더가 포함된 경우 Accept 헤더가 없으면 서버는 기본적으로 JSON으로 설정될 수 있습니다.

콘텐츠 협상에서 파이프라인은 HttpConfiguration 개체에서 IContentNegotiator 서비스를 가져옵니다. 또한 HttpConfiguration.Formatters 컬렉션에서 미디어 포맷터 목록을 가져옵니다.

다음으로 파이프라인은 IContentNegotiator.Negotiate를 호출하여 −

를 전달합니다.
  • 직렬화할 개체 유형
  • 미디어 포맷터 모음
  • HTTP 요청

Negotiate 메서드는 두 가지 정보를 반환합니다. -

  • 사용할 포맷터
  • 응답의 미디어 유형

포맷터가 없으면 Negotiate 메서드는 null을 반환하고 클라이언트는 HTTP 오류 406(Not Acceptable)을 수신합니다.

아래와 같은 StudentController를 생각해봅시다.

using DemoWebApplication.Models;
using System;
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"
         }
      };
   }
}

RESTful 서비스의 표준 중 하나는 클라이언트가 XML, JSON 등의 응답을 원하는 형식을 결정할 수 있어야 한다는 것입니다. 서버로 전송되는 요청에는 Accept 헤더가 포함됩니다. 클라이언트는 Accept 헤더를 사용하여 응답 형식을 지정할 수 있습니다. 예를 들어

Accept: application/xml returns XML
Accept: application/json returns JSON

아래 출력은 Accept Header asapplication/XML을 전달할 때 응답이 XML임을 보여줍니다.

Asp.Net webAPI C#의 콘텐츠 협상이란 무엇입니까?

아래 출력은 Accept Header asapplication/JSON을 전달할 때 응답이 JSON임을 보여줍니다.

Asp.Net webAPI C#의 콘텐츠 협상이란 무엇입니까?

응답이 요청된 형식으로 클라이언트에 전송될 때 응답의 Content-Type 헤더가 적절한 값으로 설정되어 있는지 확인합니다. 예를 들어 클라이언트가 application/xml을 요청한 경우 서버는 데이터를 XML 형식으로 보내고 Content-Type=application/xml도 설정합니다.

Asp.Net webAPI C#의 콘텐츠 협상이란 무엇입니까?

품질 요소를 지정할 수도 있습니다. 아래 예에서 xml은 json보다 더 높은 qualityfactor를 가지므로 서버는 XML formatter를 사용하고 XML.application/xml;q=0.8,application/json;q=0.5

의 데이터 형식을 지정합니다.

Asp.Net webAPI C#의 콘텐츠 협상이란 무엇입니까?