ASP.NET Web API realiza la negociación de contenido de forma predeterminada: devolverá XML o JSON u otro tipo según el Accept
encabezado. 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.Formatters
Respuestas:
Compatible solo con JSON en ASP.NET Web API: EL CAMINO CORRECTO
Reemplace IContentNegotiator con JsonContentNegotiator:
Implementación de JsonContentNegotiator:
fuente
Accept
XML cliente obtendrá JSON y no un 406 ?Accept
encabezado.GlobalConfiguration...Clear()
realmente funciona.Borre todos los formateadores y vuelva a agregar el formateador Json.
EDITAR
Lo agregué al
Global.asax
interiorApplication_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
HttpResponseMessage
lugar 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