수색…


MediaTypeFormatter 기본 정보

MediaTypeFormatterJsonMediaTypeFormatterXmlMediaTypeFormatter 클래스가 상속하는 추상 클래스입니다. 여기에서 JsonMediaTypeFormatter 클래스는 JSON 객체를 처리하고 XmlMediaTypeFormatter 클래스는 XML 객체를 처리합니다.

Accept Header 값과 관계없이 JSON 만 반환하십시오.

요청의 응답에서 JSON 객체 만 반환하려면 WebApiConfig 클래스의 Register 메서드에 application/json 또는 application/xml 이 다음 줄을 쓰면 요청의 헤더 값을 수락합니다.

config.Formatters.Remove(config.Formatters.XmlFormatter);

여기서 configHttpConfiguration 클래스의 객체입니다. 이 코드는 ASP.NET 웹 API가 클라이언트 요청의 Accept 헤더 값에 관계없이 항상 JSON을 반환하도록하는 XmlFormatter 를 완전히 제거합니다. 서비스가 XML이 아닌 JSON 만 지원하도록하려면이 기술을 사용하십시오.

Accept Header 값에 관계없이 XML 만 반환 :

요청의 응답에서 XML 객체 만 반환하려면 WebApiConfig 클래스의 Register 메서드에 application/json 또는 application/xml 에서 다음 줄을 쓰면 요청의 헤더 값을 수락합니다.

config.Formatters.Remove(config.Formatters.JsonFormatter);

여기서 config 는 위에서 설명한 HttpConfiguration 클래스의 객체입니다. 이 코드는 JsonFormatter 를 완전히 제거하여 클라이언트 요청의 Accept 헤더 값에 관계없이 항상 ASP.NET Web API가 XML을 반환하도록합니다. JSON이 아닌 XML 만 지원하도록하려면이 기술을 사용하십시오.

XML 대신 JSON 반환 :

  1. 브라우저에서 요청이 발행되면 웹 API 서비스는 XML 대신 JSON을 리턴해야합니다.
  2. 피 들러와 같은 도구로부터 요청이 내려지면 Accept 헤더 값을 존중해야합니다. 즉 Accept 헤더가 application / xml로 설정된 경우 서비스에서 XML을 반환하고 application / json으로 설정된 경우 서비스에서 JSON을 반환해야합니다.

방법 1 :

WebApiConfig 클래스의 Register 메서드에 다음 줄을 포함시킵니다.

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

대부분의 브라우저에서 기본값 인 text/html 이 요청되면 ASP.NET 웹 API에 JsonFormatter 를 사용하도록 지시합니다. 이 접근 방식의 문제점은 응답의 Content-Type 헤더가 오해의 소지가있는 text/html 설정된다는 것입니다.

방법 2 :

사용자 정의 포맷터를 사용하십시오. JsonMediaTypeFormatter 클래스에서 파생 된 클래스를 만들고 SetDefaultContentHeaders 메서드를 구현합니다.

다음은 응답으로 JSON 형식을 반환하는 사용자 정의 JSON 포맷터 클래스의 예입니다.

public class CustomJsonFormatter : JsonMediaTypeFormatter
{
    public CustomJsonFormatter()
    {
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }

    public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
    {
        base.SetDefaultContentHeaders(type, headers, mediaType);
        headers.ContentType = new MediaTypeHeaderValue("application/json");
    }
}

그리고 이것은 응답으로 CSV 형식을 반환하는 사용자 지정 미디어 형식 포맷터의 예입니다.

public class CSVMediaTypeFormatter : MediaTypeFormatter {

    public CSVMediaTypeFormatter()
    {
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
    }
    
    public CSVMediaTypeFormatter(MediaTypeMapping mediaTypeMapping) : this()
    {
        MediaTypeMappings.Add(mediaTypeMapping);
    }
    
    public CSVMediaTypeFormatter(IEnumerable<MediaTypeMapping> mediaTypeMappings) : this()
    {
        foreach (var mediaTypeMapping in mediaTypeMappings)
        {
            MediaTypeMappings.Add(mediaTypeMapping);
        }
    }
}

그런 다음 사용자 정의 포매터 클래스를 구현하면 WebApiConfig 클래스의 Register 메서드에이를 등록합니다.

config.Formatters.Add(new CustomJsonFormatter());

이제 포맷터에 따라 응답과 Content-Type 을 서버에서 가져옵니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow