1220 Stimmen

Wie bringe ich ASP.NET Web API dazu, JSON anstelle von XML mit Chrome zurückzugeben?

Die Verwendung der neueren ASP.NET Web API , in Chrom Ich sehe XML - wie kann ich es in eine Anfrage ändern? JSON damit ich sie im Browser anzeigen kann? Ich glaube, es ist nur ein Teil der Anfrage-Header, bin ich damit richtig?

11voto

Roger Lipscombe Punkte 84868

Ich habe einen globalen Aktionsfilter verwendet, um die Accept: application/xml wenn die User-Agent Kopfzeile enthält "Chrome":

internal class RemoveXmlForGoogleChromeFilter : IActionFilter
{
    public bool AllowMultiple
    {
        get { return false; }
    }

    public async Task<HttpResponseMessage> ExecuteActionFilterAsync(
        HttpActionContext actionContext,
        CancellationToken cancellationToken,
        Func<Task<HttpResponseMessage>> continuation)
    {
        var userAgent = actionContext.Request.Headers.UserAgent.ToString();
        if (userAgent.Contains("Chrome"))
        {
            var acceptHeaders = actionContext.Request.Headers.Accept;
            var header =
                acceptHeaders.SingleOrDefault(
                    x => x.MediaType.Contains("application/xml"));
            acceptHeaders.Remove(header);
        }

        return await continuation();
    }
}

Scheint zu funktionieren.

10voto

Mike Rowley Punkte 916

Die Chrome-App "Advanced REST Client" eignet sich hervorragend für die Arbeit mit REST-Diensten. Sie können den Content-Type einstellen auf application/json u.a.: Erweiterter REST-Client

10voto

Gaurav Dubey Punkte 348
config.Formatters.Remove(config.Formatters.XmlFormatter);

7voto

Nick Punkte 2465

Es ist mir unklar, warum die Antwort so kompliziert ist. Sicherlich gibt es viele Möglichkeiten, dies zu tun, mit QueryStrings, Headern und Optionen... aber was ich für die beste Praxis halte, ist einfach. Sie fordern eine einfache URL an (z.B.: http://yourstartup.com/api/cars ) und Sie erhalten im Gegenzug JSON. Sie erhalten JSON mit dem richtigen Antwort-Header:

Content-Type: application/json

Auf der Suche nach einer Antwort auf genau diese Frage bin ich auf diesen Thread gestoßen und musste weiterblättern, weil diese akzeptierte Antwort nicht genau funktioniert. Ich habe eine Antwort gefunden, die meiner Meinung nach zu einfach ist, um nicht die beste zu sein:

Festlegen des Standard-WebAPI-Formatierers

Ich werde auch hier meinen Tipp abgeben.

WebApiConfig.cs

namespace com.yourstartup
{
  using ...;
  using System.Net.Http.Formatting;
  ...
  config.Formatters.Clear(); //because there are defaults of XML..
  config.Formatters.Add(new JsonMediaTypeFormatter());
}

Ich habe eine Frage dazu, woher die Standardwerte (zumindest die, die ich sehe) kommen. Sind sie .NET-Standards, oder vielleicht irgendwo anders erstellt (von jemand anderem auf meinem Projekt). Wie auch immer, hoffen, dass dies hilft.

7voto

Akshay Kapoor Punkte 165

Sie können wie unten beschrieben vorgehen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X