c# - una - update api android studio




¿Cómo cambiar la API Web 2 predeterminada al formateador JSON? (4)

Creo que deberías cambiar como sigue.

    /*Response as default json format
     * example (http://localhost:9090/WebApp/api/user/)
     */
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

    /*Response as json format depend on request type
     * http://localhost:9090/WebApp/api/user/?type=json
     */
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
    new QueryStringMapping("type", "json", new MediaTypeHeaderValue("application/json")));

    /*Response as xml format depend on request type
     * http://localhost:9090/WebApp/api/user/?type=xml
     */
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(
    new QueryStringMapping("type", "xml", new MediaTypeHeaderValue("application/xml")));

Tengo un proyecto de API web que devuelve algunos datos del producto. Negocia el tipo de devolución correctamente según el encabezado Aceptar (JSON / XML) de la solicitud. El problema es que si no se especifica ningún encabezado Accept, se devuelve XML, pero quiero que devuelva JSON de manera predeterminada

http://website.com/MyPage?type=json // returns json
http://website.com/MyPage?type=xml // returns xml
http://website.com/MyPage // returns xml by default

Aquí está mi código actual se ve así:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(
new QueryStringMapping("type", "xml", new MediaTypeHeaderValue("application/xml")));

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
new QueryStringMapping("type", "json", new MediaTypeHeaderValue("application/json")));

Creo que Web API solo usa el primer formateador que puede encontrar en la colección de Formateadores. Puedes cambiar el orden con algo como

GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
GlobalConfiguration.Configuration.Formatters.Add(new XmlMediaTypeFormatter());

Pero parece que el formateador JSON debe ser el primero por defecto, por lo que es posible que desee verificar si ya está modificando esta colección en alguna parte.


Agregue esto en su App_Start/WebApiConfig.cs :

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

Ninguna de las respuestas anteriores funcionó para mí. El problema era que estaba obteniendo los formateadores de GlobalConfiguration y no el objeto de config creado con la new HttpConfiguration() Aquí está el código que funciona para mí:

public class WebApiConfig
{
    public static HttpConfiguration Register()
    {

        var config = new HttpConfiguration();
        // This next line could stay if you want xml formatting
        config.Formatters.Remove(config.Formatters.XmlFormatter);

        // This next commented out line was causing the problem
        //var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;

        // This next line was the solution
        var jsonFormatter = config.Formatters.JsonFormatter;
        jsonFormatter.UseDataContractJsonSerializer = false; // defaults to false, but no harm done
        jsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
        jsonFormatter.SerializerSettings.Formatting = Formatting.None;
        jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();           

        // remaining irrelevant code commented out
        return config;
    }
}






asp.net-web-api2