[json] Chrome을 사용하여 XML 대신 JSON을 반환하도록 ASP.NET 웹 API를 얻으려면 어떻게해야합니까?
Chrome 에서 최신 ASP.NET 웹 API를 사용하여 XML 을 볼 수 있습니다. 브라우저에서 볼 수 있도록 JSON 을 요청 하도록 XML을 어떻게 변경할 수 있습니까? 요청 헤더의 일부일 뿐이라고 생각합니다. 맞습니까?
답변
App_Start / WebApiConfig.cs
MVC 웹 API 프로젝트 에서 클래스에 다음을 추가합니다 .
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html") );
따라서 대부분의 쿼리에서 JSON을 얻을 수 있지만 XML
을 보낼 때 얻을 수 있습니다 text/xml
.
당신이 반응을해야하는 경우 Content-Type
로 application/json
확인하시기 바랍니다 아래 토드의 답변을 .
NameSpace
사용하고 System.Net.Http.Headers
있습니다.
답변
이 작업을 수행하면 WebApiConfig
기본적으로 JSON이 제공되지만 text/xml
요청 Accept
헤더 로 전달하면 여전히 XML을 반환 할 수 있습니다.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
}
MVC 프로젝트 유형을 사용하지 않아서이 클래스가 시작되지 않은 경우이를 통합하는 방법에 대한 자세한 내용 은이 답변 을 참조하십시오.
답변
RequestHeaderMapping을 사용 Content-Type = application/json
하면 응답 헤더를 설정하기 때문에 Firefox (JSONView 추가 기능이있는)에서 응답을 JSON으로 형식화 할 수 있습니다.
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept",
"text/html",
StringComparison.InvariantCultureIgnoreCase,
true,
"application/json"));
답변
나는 Felipe Leusin의 접근 방식이 가장 좋습니다. 실제로 XML을 원하는 클라이언트의 컨텐츠 협상을 방해하지 않고 브라우저가 JSON을 얻도록하십시오. 나를 위해 유일하게 누락 된 부분은 응답 헤더에 여전히 content-type : text / html이 포함되어 있다는 것입니다. 왜 문제가 되었습니까? 콘텐츠 형식을 검사 하는 JSON 형식 기 Chrome 확장 프로그램을 사용하고 있기 때문에 익숙한 서식을 얻지 못합니다. 텍스트 / HTML 요청을 수락하고 application / json 응답을 반환하는 간단한 사용자 정의 포맷터로 수정했습니다.
public class BrowserJsonFormatter : JsonMediaTypeFormatter
{
public BrowserJsonFormatter() {
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
this.SerializerSettings.Formatting = Formatting.Indented;
}
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) {
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType = new MediaTypeHeaderValue("application/json");
}
}
다음과 같이 등록하십시오 :
config.Formatters.Add(new BrowserJsonFormatter());
답변
MVC4 빠른 팁 # 3 – ASP.Net 웹 API에서 XML 포맷터 제거
에서하는 Global.asax
줄을 추가 :
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
이렇게 :
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
BundleTable.Bundles.RegisterTemplateBundles();
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
답변
에서 WebApiConfig.cs ,의 끝에 추가 등록 기능 :
// Remove the XML formatter
config.Formatters.Remove(config.Formatters.XmlFormatter);
소스 .
답변
에서 Global.asax에 나는 아래의 코드를 사용하고 있습니다. JSON을 얻는 내 URI는http://www.digantakumar.com/api/values?json=true
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("json", "true", "application/json"));
}