asp.net-web-api
ASP.NET 웹 API MediaTypeFormatter
수색…
MediaTypeFormatter 기본 정보
MediaTypeFormatter 는 JsonMediaTypeFormatter 및 XmlMediaTypeFormatter 클래스가 상속하는 추상 클래스입니다. 여기에서 JsonMediaTypeFormatter 클래스는 JSON 객체를 처리하고 XmlMediaTypeFormatter 클래스는 XML 객체를 처리합니다.
Accept Header 값과 관계없이 JSON 만 반환하십시오.
요청의 응답에서 JSON 객체 만 반환하려면 WebApiConfig 클래스의 Register 메서드에 application/json 또는 application/xml 이 다음 줄을 쓰면 요청의 헤더 값을 수락합니다.
config.Formatters.Remove(config.Formatters.XmlFormatter);
여기서 config 는 HttpConfiguration 클래스의 객체입니다. 이 코드는 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 반환 :
- 브라우저에서 요청이 발행되면 웹 API 서비스는 XML 대신 JSON을 리턴해야합니다.
- 피 들러와 같은 도구로부터 요청이 내려지면 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 을 서버에서 가져옵니다.