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?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.
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.
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
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]
.