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?
Antworten
Zu viele Anzeigen?Hinweis: Lesen Sie die Kommentare zu dieser Antwort. Es kann eine XSS-Schwachstelle entstehen, wenn Sie die Standardfehlerbehandlung von WebAPI verwenden.
Ich füge einfach folgendes ein App_Start / WebApiConfig.cs
Klasse in meiner MVC Web-API Projekt.
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html") );
Das stellt sicher, dass Sie bei den meisten Abfragen JSON erhalten, aber Sie können auch XML
wenn Sie senden text/xml
.
Wenn Sie die Antwort haben müssen Content-Type
como application/json
bitte prüfen Todd's Antwort unten .
NameSpace
verwendet System.Net.Http.Headers
.
Wenn Sie dies in der WebApiConfig
erhalten Sie standardmäßig JSON, aber Sie können auch XML zurückgeben, wenn Sie text/xml
wie die Anfrage Accept
Kopfzeile.
Hinweis: Damit entfällt die Unterstützung für application/xml
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);
}
}
Wenn Sie nicht den MVC-Projekttyp verwenden und daher diese Klasse nicht von Anfang an hatten, siehe diese Antwort um zu erfahren, wie Sie es einbinden können.
Die Verwendung von RequestHeaderMapping funktioniert sogar noch besser, da es auch die Content-Type = application/json
in der Kopfzeile der Antwort, was es Firefox (mit dem JSONView-Add-on) ermöglicht, die Antwort als JSON zu formatieren.
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept",
"text/html",
StringComparison.InvariantCultureIgnoreCase,
true,
"application/json"));
Ich mag Der Ansatz von Felipe Leusin Am besten ist es, dafür zu sorgen, dass die Browser JSON erhalten, ohne die Aushandlung von Inhalten durch Kunden zu beeinträchtigen, die eigentlich XML wollen. Das einzige, was mir fehlte, war, dass die Antwort-Header immer noch content-type: text/html enthielten. Warum war das ein Problem? Weil ich die JSON Formatter Chrome-Erweiterung die den Inhaltstyp überprüft, und ich bekomme nicht die schöne Formatierung, die ich gewohnt bin. Ich habe das mit einem einfachen benutzerdefinierten Formatierer behoben, der text/html-Anfragen annimmt und application/json-Antworten zurückgibt:
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");
}
}
Registrieren Sie sich wie folgt:
config.Formatters.Add(new BrowserJsonFormatter());
MVC4-Kurztipp Nr. 3 - Entfernen des XML-Formatierers aus ASP.Net Web API
Unter Global.asax
die Zeile hinzufügen:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
etwa so:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
BundleTable.Bundles.RegisterTemplateBundles();
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
- See previous answers
- Weitere Antworten anzeigen