Retour au format xml ou json de MVC, web api basées sur demande
Le suivant webapiconfig;
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
et ce contrôleur
public class ProductsController : ApiController
{
Product[] _products = new Product[]
{
new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
};
public IEnumerable<Product> GetAllProducts()
{
return _products;
}
}
À l'aide de l'URL http://localhost/api/Products
je obtenir une liste des produits au format XML.
Ce que j'aimerais, c'est avoir la possibilité de retourner format json ou xml basé sur la demande. Donc, pour json, il serait;
http://localhost/api/Products.json
et pour XML, il serait;
http://localhost/api/Products.xml
de même;
http://localhost/api/Products.json/1/
http://localhost/api/Products.xml/1/
Est-ce possible et comment puis-je obtenir cette fonctionnalité?
Une alternative serait quelque chose comme;
http://localhost/api/json/Products/
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez le faire avec
AddUriPathExtensionMapping
Vous pouvez créer des itinéraires, comme ceci:
Alors vous avez besoin d'étendre les formateurs:
Assurez-vous d'ajouter une référence à
System.Net.Http.Formatting
, que ces méthodes sont des méthodes d'extension et de l'intellisense ne les vois pas par défaut.Rappelez-vous dans cet exemple, vous avez encore à la question de la demande avec le content-type approprié. Toutefois, si vous voulez avoir ces directement accessibles via la barre d'adresse du navigateur vous pouvez mapper à "text/html".
J'ai écrit un billet de blog sur tout ce qui tout à l'heure - ce qui devrait être utile et vous faire entrer dans plus de détails http://www.strathweb.com/2012/04/different-mediatypeformatters-for-same-mediaheadervalue-in-asp-net-web-api/