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?

35voto

suhair Punkte 10787

Eine schnelle Möglichkeit ist die Verwendung der MediaTypeMapping-Spezialisierung. Hier ist ein Beispiel für die Verwendung von QueryStringMapping im Ereignis Application_Start:

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

Wenn die URL nun den Querystring ?a=b enthält, wird die Json-Antwort im Browser angezeigt.

22voto

dmyoko Punkte 647

Verwenden Sie Ihren Browser nicht zum Testen Ihrer API.

Versuchen Sie stattdessen, einen HTTP-Client zu verwenden, mit dem Sie Ihre Anfrage spezifizieren können, z. B. CURL oder sogar Fiddler.

Das Problem liegt beim Client, nicht bei der API. Die Web-API verhält sich korrekt entsprechend der Anfrage des Browsers.

20voto

pavan kumar Punkte 366

Die meisten der oben genannten Antworten sind absolut sinnvoll. Da Sie sehen, dass die Daten im XML-Format formatiert werden, bedeutet dies, dass der XML-Formatierer angewendet wird, so dass Sie das JSON-Format sehen können, indem Sie den XML-Formatierer aus dem HttpConfiguration-Parameter entfernen wie

public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );                
            config.Formatters.Remove(config.Formatters.XmlFormatter);                
            config.EnableSystemDiagnosticsTracing();
        }

da JSON das Standardformat ist

15voto

Stacked Punkte 6174

Die Rückgabe des richtigen Formats erfolgt durch den Medientyp-Formatierer. Wie bereits erwähnt, können Sie dies in der WebApiConfig classe :

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ...

        // Configure Web API to return JSON
        config.Formatters.JsonFormatter
        .SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));

        ...
    }
}

Weitere Informationen finden Sie hier:

Für den Fall, dass Ihre Aktionen XML zurückgeben (was standardmäßig der Fall ist) und Sie nur eine bestimmte Methode benötigen, um JSON zurückzugeben, können Sie eine ActionFilterAttribute und wendet sie auf diese spezielle Aktion an.

Attribut filtern:

public class JsonOutputAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        ObjectContent content = actionExecutedContext.Response.Content as ObjectContent;
        var value = content.Value;
        Type targetType = actionExecutedContext.Response.Content.GetType().GetGenericArguments()[0];

        var httpResponseMsg = new HttpResponseMessage
        {
            StatusCode = HttpStatusCode.OK,
            RequestMessage = actionExecutedContext.Request,
            Content = new ObjectContent(targetType, value, new JsonMediaTypeFormatter(), (string)null)
        };

        actionExecutedContext.Response = httpResponseMsg;
        base.OnActionExecuted(actionExecutedContext);
    }
}

Zum Handeln auffordern:

[JsonOutput]
public IEnumerable<Person> GetPersons()
{
    return _repository.AllPersons(); // the returned output will be in JSON
}

Beachten Sie, dass Sie das Wort weglassen können Attribute auf die Aktionsdekoration und verwenden Sie nur [JsonOutput] 代わりに [JsonOutputAttribute] .

13voto

A.T. Punkte 21218

In der neuesten Version von ASP.net WebApi 2, unter WebApiConfig.cs wird dies funktionieren:

config.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
config.Formatters.Add(GlobalConfiguration.Configuration.Formatters.JsonFormatter);

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