Pertanyaan Bagaimana cara mendapatkan ASP.NET Web API untuk mengembalikan JSON daripada XML menggunakan Chrome?


Menggunakan yang lebih baru ASP.NET Web API, di Chrome Saya melihat XML - bagaimana saya bisa mengubahnya untuk meminta JSON jadi saya bisa melihatnya di browser? Saya percaya itu hanya bagian dari header permintaan, apakah saya benar dalam hal itu?


1221
2018-03-23 23:04


asal


Jawaban:


Saya hanya menambahkan yang berikut di App_Start / WebApiConfig.cs kelas dalam proyek API Web MVC saya.

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

Itu memastikan Anda mendapatkan json pada sebagian besar kueri, tetapi Anda bisa mendapatkannya xml ketika Anda mengirim text/xml.

Jika Anda perlu memiliki respon Content-Type sebagai application/json silakan periksa Jawaban Todd di bawah ini.

NameSpace menggunakan System.Net.Http.Headers;


1528
2017-11-07 20:25



Jika Anda melakukan ini di WebApiConfig Anda akan mendapatkan JSON secara default, tetapi masih akan memungkinkan Anda untuk mengembalikan XML jika Anda lulus text/xml sebagai permintaan Accept tajuk

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);
    }
}

Jika Anda tidak menggunakan jenis proyek MVC dan karena itu tidak memiliki kelas ini untuk memulai, lihat jawaban ini untuk detail tentang cara menggabungkannya.


471
2017-09-19 02:53



saya suka Pendekatan Felipe Leusin terbaik - pastikan browser mendapatkan JSON tanpa mengorbankan negosiasi konten dari klien yang benar-benar menginginkan XML. Satu-satunya bagian yang hilang untuk saya adalah bahwa header respons masih berisi tipe konten: teks / html. Mengapa itu menjadi masalah? Karena saya menggunakan Ekstensi Chrome JSON Formatter, yang memeriksa tipe konten, dan saya tidak mendapatkan format cantik yang biasa saya gunakan. Saya memperbaiki itu dengan formatter sederhana yang menerima permintaan teks / html dan mengembalikan aplikasi / tanggapan 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");
    }
}

Daftarkan seperti ini:

config.Formatters.Add(new BrowserJsonFormatter());

277
2017-12-12 23:52



Menggunakan RequestHeaderMapping bekerja lebih baik, karena juga mengatur Content-Type = application/json di header respons, yang memungkinkan Firefox (dengan add-on JSONView) untuk memformat respons sebagai JSON.

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept", 
                              "text/html",
                              StringComparison.InvariantCultureIgnoreCase,
                              true, 
                              "application/json"));

230
2017-09-26 20:48



Cepat MVC4 Tip 3 - Menghapus Formatter XML dari ASP.Net Web API

Di Global.asax tambahkan baris:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

seperti ini:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    BundleTable.Bundles.RegisterTemplateBundles();
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}

171
2018-04-02 16:11



Dalam WebApiConfig.cs, tambahkan ke ujung Daftar fungsi:

// Remove the XML formatter
config.Formatters.Remove(config.Formatters.XmlFormatter);

Sumber.


102
2018-01-05 22:43



Dalam Global.asax Saya menggunakan kode di bawah ini. URI saya untuk mendapatkan JSON 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"));
}

87
2017-07-06 07:00



Lihatlah negosiasi konten di WebAPI. IniBagian 1 & Bagian 2) posting blog yang luar biasa rinci dan menyeluruh menjelaskan cara kerjanya.

Singkatnya, Anda benar, dan hanya perlu mengatur Accept atau Content-Type meminta tajuk. Mengingat Action Anda tidak dikodekan untuk mengembalikan format tertentu, Anda dapat mengaturnya Accept: application/json.


47
2018-03-24 04:24



Karena pertanyaannya khusus untuk Chrome, Anda bisa mendapatkan Perpanjangan postman yang memungkinkan Anda mengatur jenis konten permintaan.

Postman


37
2017-09-27 10:40



Salah satu opsi cepat adalah menggunakan spesialisasi MediaTypeMapping. Berikut ini contoh penggunaan QueryStringMapping dalam acara Application_Start:

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

Sekarang kapan pun url berisi querystring? A = b dalam kasus ini, respons Json akan ditampilkan di browser.


30
2018-03-27 05:08