ASP.NET Web API realiza la negociación de contenido de forma predeterminada: devolverá XML o JSON u otro tipo según el Acceptencabezado. No necesito / quiero esto, ¿hay alguna manera (como un atributo o algo así) de decirle a la API web que siempre devuelva JSON?
asp.net-mvc
asp.net-web-api
Borek Bernard
fuente
fuente

GlobalConfiguration.Configuration.FormattersRespuestas:
Compatible solo con JSON en ASP.NET Web API: EL CAMINO CORRECTO
Reemplace IContentNegotiator con JsonContentNegotiator:
Implementación de JsonContentNegotiator:
fuente
AcceptXML cliente obtendrá JSON y no un 406 ?Acceptencabezado.GlobalConfiguration...Clear()realmente funciona.Borre todos los formateadores y vuelva a agregar el formateador Json.
EDITAR
Lo agregué al
Global.asaxinteriorApplication_Start().fuente
Philip W tenía la respuesta correcta, pero para mayor claridad y una solución de trabajo completa, edite su archivo Global.asax.cs para que se vea así: (Tenga en cuenta que tuve que agregar la referencia System.Net.Http.Formatting al archivo generado en stock)
fuente
Esto borra el formateador XML y, por lo tanto, el formato JSON es el predeterminado.
fuente
Inspirado por la excelente respuesta de Dmitry Pavlov, la modifiqué ligeramente para poder conectar cualquier formateador que quisiera aplicar.
Crédito a Dmitry.
fuente
Si desea hacer eso solo para un método, declare su método como regresando en
HttpResponseMessagelugar deIEnumerable<Whatever>y haga:este código es doloroso para las pruebas unitarias, pero también es posible así:
fuente
Esto tiene los encabezados correctos establecidos. Parece un poco más elegante.
fuente
Puede usar en WebApiConfig.cs:
fuente
para aquellos que usan OWIN
se convierte en (en Startup.cs):
fuente