<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de Hinault Romaric Donfack &#187; ASP.NET Web API</title>
	<atom:link href="https://blog.developpez.com/lilroma/pcategory/net/asp-net/asp-net-mvc-4/asp-net-web-api/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/lilroma</link>
	<description>Bienvenue sur ce blog. Vous y trouverez du .NET, du .NET...  encore du .NET, toujours du .NET et très peu de chose sur moi</description>
	<lastBuildDate>Sat, 27 Aug 2016 14:24:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>« ASP.NET et Web Tools 2012.2 » sort en RC, avec de nouvelles fonctionnalités pour WebForms, MVC, WebAPI et SignalR</title>
		<link>https://blog.developpez.com/lilroma/p11585/net/asp-net-et-web-tools-2012-2-sort-en-rc-avec-de-nouvelles-fonctionnalites-pour-webforms-mvc-webapi-et-signalr</link>
		<comments>https://blog.developpez.com/lilroma/p11585/net/asp-net-et-web-tools-2012-2-sort-en-rc-avec-de-nouvelles-fonctionnalites-pour-webforms-mvc-webapi-et-signalr#comments</comments>
		<pubDate>Tue, 18 Dec 2012 16:51:09 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET MVC 4]]></category>
		<category><![CDATA[ASP.NET Web API]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WebPages]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/lilroma/?p=104</guid>
		<description><![CDATA[« ASP.NET et Web Tools 2012.2 » sort en RC, avec de nouvelles fonctionnalités pour WebForms, MVC et WebAPI Le Web évolue rapidement, et Microsoft est conscient de cela. L’éditeur a ainsi adopté un cycle de mise à jour pour &#8230; <a href="https://blog.developpez.com/lilroma/p11585/net/asp-net-et-web-tools-2012-2-sort-en-rc-avec-de-nouvelles-fonctionnalites-pour-webforms-mvc-webapi-et-signalr">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>« ASP.NET et Web Tools 2012.2 » sort en RC, avec de nouvelles fonctionnalités pour WebForms, MVC et WebAPI </p>
<p>Le Web évolue rapidement, et Microsoft est conscient de cela. L’éditeur a ainsi adopté un cycle de mise à jour pour ASP.NET plus rapide que celui de Visual Studio.</p>
<p>La société compte donc publier une mise à jour pour sa plateforme de développement Web ASP.NET en début d’année prochaine.</p>
<p>Les développeurs qui veulent commencer à « jouer » avec les nouvelles fonctionnalités de cette mise à jour peuvent déjà télécharger sa version Release Candidate (RC) qui vient d’être publiée par les équipes  ASP.NET et Visual Web Developer de Microsoft.</p>
<p><img src="http://rdonfack.developpez.com/images/aspnevnext.png" alt="" /></p>
<p><span id="more-104"></span></p>
<p>« ASP.NET et Web Tools 2012.2 » RC étend le runtine ASP.NET existant et ajout de nouveaux outils Web à Visual Studio 2012 pour WebForms, MVC, WebAPI, etc. Il s’agit des fonctionnalités suivantes :</p>
<ol>
<li>De nouveaux modèles de projets ASP.NET MVC. la création d’applications Facebook est désormais plus facile avec le modèle Facebook, qui permet en quelques étapes de créer une application qui interagir avec le réseau social. Le nouveau modèle « Single Page Application » permet aux développeurs de créer des applications Web interactives côté client à l’aide de jQuery, Knockout et ASP.NET Web API ;</li>
<li>Le support de la communication en temps réel avec ASP.NET SignalR. SignalR est une bibliothèque client/serveur qui permet aux clients basés sur un navigateur et aux composants serveur basés sur ASP.NET d&rsquo;avoir une conversation à étapes multiples et bidirectionnelle;</li>
<li>Le support de l’IntelliSense pour Knockout  et l’ajout de la prise en charge de JSON en tant que classe ;
</li>
<li>L’introduction de nouvelles fonctionnalités pour ASP.NET Web API, y compris le support d’OData, l’ajout des fonctions de traçabilité, de monitoring et  de génération d’une page d’aide pour une API Web;</li>
<li>Des améliorations de l’inspecteur de page, qui offre désormais de meilleures performances pour JavaScript et CSS, dont la capacité de voir les mises à jour en temps réel d’un fichier CSS ;</li>
<li>L’unification de l’expérience de publication pour une application Web et un projet de type site Web, ainsi que l’ajout des options de publication sélective ;</li>
<li>L’intégration de la nouvelle fonctionnalité ASP.NET Friendly URL. Cette fonction rend facile la génération des URL sans l’extension .aspx. Elle permet également au développeur d’ajouter plus facilement le support du mobile dans son application Web ;</li>
<li>La mise à jour des modèles de projets Web dans Visual Studio 2012.</li>
</ol>
<p>Cette mise à jour est livrée comme des packages NuGet supplémentaires. Ce qui signifie qu’il ne peut avoir aucun problème de compatibilité avec les projets existants.</p>
<p><strong><a href="http://www.asp.net/vnext">Télécharger &laquo;&nbsp;ASP.NET et Web Tools 2012.2&Prime; RC</a></strong></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consommer une API Web avec HttpClient</title>
		<link>https://blog.developpez.com/lilroma/p11330/net/consommer-une-api-web-avec-httpclient</link>
		<comments>https://blog.developpez.com/lilroma/p11330/net/consommer-une-api-web-avec-httpclient#comments</comments>
		<pubDate>Thu, 20 Sep 2012 20:55:30 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET Web API]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/lilroma/?p=92</guid>
		<description><![CDATA[Dans un précédent article, j&#8217;ai présenté ASP.NET Web API, la nouveauté phare de ASP.NET MVC 4, qui a pour objectif principal de permettre aux développeurs d’exposer leurs applications, données et services sur le web directement à travers HTTP. Le support &#8230; <a href="https://blog.developpez.com/lilroma/p11330/net/consommer-une-api-web-avec-httpclient">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans <a href="http://blog.developpez.com/lilroma/p10768/">un précédent article</a>, j&rsquo;ai présenté ASP.NET Web API, la nouveauté phare de ASP.NET MVC 4, qui a  pour objectif principal de permettre aux développeurs d’exposer leurs applications, données et services sur le web directement à travers HTTP. Le support d’ASP.NET Web API permet de créer facilement des API Web puissantes, qui peuvent être consultées à partir d’un large éventail de client (réseaux sociaux, navigateurs, terminaux mobiles, etc.).</p>
<p>Dans ce article, nous avons créer une première API et consommer celle-ci dans une page Web en utilisant jQuery. Dans ce billet de blog, je vais vous montrer comment vous pouvez interagir avec votre API dans une application native en utilisant HttpClient.</p>
<p><span id="more-92"></span></p>
<p>Dans une application Web, vous pouvez simplement interagir avec une API Web coté client en appelant les requêtes HTTP Get, Put, Post et Delete dans un Script JavaScript ou en utilisant jQuery. Mais, si vous voulez accéder à votre API à partir d’une application Desktop par exemple, comment procéder ?</p>
<p>C’est à ce niveau qu’intervient HTTPClient. HTTPClient est un client moderne HTTP pour les applications .NET.  Il peut être utilisé pour consommer avec souplesse et simplicité les fonctionnalités exposées via HTTP. Vous pouvez utiliser HTTPClient pour mettre en œuvre des interactions avec une API Web en envoyant et en recevant des réponses à partir des verbes standards Get, Put, Post et Delete de HTTP grâce aux méthodes GetAsync, PutAsync, PostAsync, DeleteAsync.</p>
<p>L’exemple ci-dessous illustre comment vous pouvez consommer les données au format XML d’une API Web en utilisant la méthode GetAsync.</p>
<div>
<pre>HttpClient client = <span style="color: #0000ff">new</span> HttpClient();<br />client.DefaultRequestHeaders.Accept.Add(<span style="color: #0000ff">new</span> MediaTypeWithQualityHeaderValue(<span style="color: #006080">&quot;application/xml&quot;</span>));<br />var response = client.GetAsync(<span style="color: #006080">&quot;http://localhost:59130/api/Customer&quot;</span>).Result;<br /></pre>
<p></div>
<p>Si vous souhaitez que les données soient retournées au format XML, vous pouvez procéder comme suit :</p>
<div style="background-color: #f4f4f4;font-family: 'Courier New', Courier, Monospace;font-size: 8pt;line-height: 12pt;border: solid 1px silver;cursor: text;margin: 20px 0px 10px 0px;overflow: auto;padding: 4px;width: 97.5%;direction: ltr;text-align: left">
<pre style="background-color: #f4f4f4;font-family: 'Courier New', Courier, Monospace;font-size: 8pt;line-height: 12pt;border-style: none;color: black;overflow: visible;padding: 0px;width: 100%;margin: 0em;direction: ltr;text-align: left">HttpClient client = <span style="color: #0000ff">new</span> HttpClient();<br />client.DefaultRequestHeaders.Accept.Add(<span style="color: #0000ff">new</span> MediaTypeWithQualityHeaderValue(<span style="color: #006080">"application/json"</span>));<br />var response = client.GetAsync(<span style="color: #006080">"http://localhost:59130/api/Customer"</span>).Result;</pre>
<p></div>
<p>La procédure <strong>client.DefaultRequestHeaders.Accept.Add()</strong> permet de définir le format qui sera utilisé pour sérialiser les données.</p>
<p>La procédure asynchrone GetAsync() de la classe HttpClient() prend en paramètre une URI ou une chaine de caractères qui représente l’URL de l’API Web. GetAsync effectue une requête HTTP GET en utilisant l’URL passée en paramètre, puis retourne directement une tache dont la propriété Result (Task.Result) contient la réponse  HTTP (HttpResponseMessage). </p>
<p>NB : Il est recommandé lors de l’utilisation d’une méthode asynchrone d’utiliser également le mot clé await pour éviter que l’application ne soit bloquée jusqu’à ce que l’opération soit complète. On peut s’en passer pour une application console, mais pour une solution Desktop, faudra penser à utiliser await pour éviter le blocage de l’interface utilisateur. Pour plus de détails sur async et await, je vous invite à lire cet excellent article sur le sujet : les nouveautés de C# 5.0. </p>
<p>A titre d’exemple, vous allez créer une application console qui consomme l’API que vous avez créée ci-dessus. Cliquez sur le menu « FICHIER », sélectionnez « Ajouter » puis « Nouveau projet ». Sélectionnez le projet « Application Console » et donnez-lui le nom « TestFirstWebAPI ».</p>
<p>Après création du projet, vous allez ajouter une référence à HTTPClient. HTTPClient n’étant pas disponible par défaut dans le Framework .NET ou avec ASP.NET MVC 4, vous devez passer par le gestionnaire de packages NuGet pour ajouter cette dépendance à votre application.</p>
<p>Faites un clic droit sur votre projet dans l’explorateur de solution et sélectionnez la commande « Gérer les packages NuGet… ». Lorsque l’interface de NuGet va s’afficher, recherchez le package HTTPClient.</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/decouverte-asp-net-web-api/images/img7.png" alt="" /> </p>
<p>L’installation du package va  entrainer l’installation des dépendances System.Net.Http et System.Json que vous allez utiliser dans votre application.</p>
<p>Ajoutez une classe dans votre projet ayant la même définition que la classe Customer dans le projet ASP.NET MVC. Pour rappel, cette classe doit avoir la définition suivante :</p>
<div style="background-color: #f4f4f4;font-family: 'Courier New', Courier, Monospace;font-size: 8pt;line-height: 12pt;border: solid 1px silver;cursor: text;margin: 20px 0px 10px 0px;overflow: auto;padding: 4px;width: 97.5%;direction: ltr;text-align: left">
<pre style="background-color: #f4f4f4;font-family: 'Courier New', Courier, Monospace;font-size: 8pt;line-height: 12pt;border-style: none;color: black;overflow: visible;padding: 0px;width: 100%;margin: 0em;direction: ltr;text-align: left"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Customer<br />    {<br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> Id { get; set; }<br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> FirstName { get; set; }<br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> LastName { get; set; }<br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> EMail { get; set; }<br />    }<br /></pre>
<p></div>
<p>Ajoutez par la suite une référence à System.Net.Http.Formatting  et System.Net.Http.Headers.</p>
<div style="background-color: #f4f4f4;font-family: 'Courier New', Courier, Monospace;font-size: 8pt;line-height: 12pt;border: solid 1px silver;cursor: text;margin: 20px 0px 10px 0px;overflow: auto;padding: 4px;width: 97.5%;direction: ltr;text-align: left">
<pre style="background-color: #f4f4f4;font-family: 'Courier New', Courier, Monospace;font-size: 8pt;line-height: 12pt;border-style: none;color: black;overflow: visible;padding: 0px;width: 100%;margin: 0em;direction: ltr;text-align: left"><span style="color: #0000ff">using</span> System.Net.Http.Formatting;<br /><span style="color: #0000ff">using</span> System.Net.Http.Headers;</pre>
<p></div>
<p>Vous allez maintenant ajouter les lignes de code suivantes à la fonction Main de votre application.</p>
<div>
<pre>HttpClient client = <span style="color: #0000ff">new</span> HttpClient();<br /><br /><br />client.DefaultRequestHeaders.Accept.Add(<br />     <span style="color: #0000ff">new</span> MediaTypeWithQualityHeaderValue(<span style="color: #006080">&quot;application/json&quot;</span>));<br /><br /> var response = client.GetAsync(<span style="color: #006080">&quot;http://localhost:59130/api/customer&quot;</span>).Result;  <br /><br /> <span style="color: #0000ff">if</span> (response.IsSuccessStatusCode)<br /> {<br />     <br />     var Customers = response.Content.ReadAsAsync&lt;IEnumerable&lt;Customer&gt;&gt;().Result;<br />     <span style="color: #0000ff">foreach</span> (var c <span style="color: #0000ff">in</span> Customers)<br />     {<br />         Console.WriteLine(<span style="color: #006080">&quot;{0}\t{1}\t{2}&quot;</span>, c.FirstName, c.LastName, c.EMail);<br />        <br />     }<br /> }<br /> <span style="color: #0000ff">else</span><br /> {<br />     Console.WriteLine(<span style="color: #006080">&quot;{0} ({1})&quot;</span>, (<span style="color: #0000ff">int</span>)response.StatusCode, response.ReasonPhrase);<br /> }<br />     Console.ReadLine();<br /></pre>
<p></div>
<p>La procédure ReadAsAsync() lit et déserialise automatiquement le corps de la réponse HTTP qui contient la liste des clients.  </p>
<p>En appuyant sur F5 pour lancer le débogage de votre application, vous allez obtenir le résultat suivant :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/decouverte-asp-net-web-api/images/img8.png" alt="" /> </p>
<p>Rassurez vous que vous utilisez un numéro de port spécifique pour votre application (59130 pour mon cas). Vous pouvez vérifier cela dans les propriétés du projet, onglet Web :</p>
<p><img src="http://rdonfack.developpez.com/tutoriels/dotnet/decouverte-asp-net-web-api/images/img9.png" alt="" /></p>
<p>Vous avez le choix entre utiliser un numéro de port spécifique ou utiliser le serveur Web IIS local si vous en avez. Dans ces cas, le numéro de port ne varie que si vous décidez de le modifier.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser WebAPI dans une application ASP.NET WebForms</title>
		<link>https://blog.developpez.com/lilroma/p11050/net/utiliser_webapi_dans_une_application_asp</link>
		<comments>https://blog.developpez.com/lilroma/p11050/net/utiliser_webapi_dans_une_application_asp#comments</comments>
		<pubDate>Mon, 28 May 2012 10:18:54 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET Web API]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La bêta d’ASP.NET MVC 4 avait été expédiée avec WebAPI, un cadre permettant aux développeurs d’exposer leurs applications, données et services sur le Web directement à travers HTTP. Dans mon précédent billet de blog sur WebAPI, j’ai décrit comment utiliser &#8230; <a href="https://blog.developpez.com/lilroma/p11050/net/utiliser_webapi_dans_une_application_asp">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>La bêta d’ASP.NET MVC 4 avait été expédiée avec WebAPI, un cadre permettant aux développeurs d’exposer leurs applications, données et services sur le Web directement à travers HTTP.</p>
<p>Dans <a href="http://blog.developpez.com/lilroma/p10807/">mon précédent billet de blog</a> sur WebAPI, j’ai décrit comment utiliser WebAPi dans une application ASP.NET MVC. Mais, il est également possible de l’utiliser dans une application ASP.NET WebForms.</p>
<p><span id="more-78"></span></p>
<p>Je vais montrer dans cet article comment utiliser simplement WebAPI dans une application ASP.NET. Dès lors que vous avez installé ASP.NET MVC 4 beta, vous pouvez dans n’importe quel projet (Application Web, Site Web) ajouter un contrôleur WebAPI. Celui-ci va automatiquement intégrer dans votre solution toutes les références nécessaires pour WebAPI.</p>
<p>Pour illustrer cela, vous allez créer une nouvelle application Web ASP.NET. Vous devez au préalable avoir installé ASP.NET MVC 4 beta.</p>
<p><img src="http://blog.developpez.com/media/createaspapp.png" width="704" height="583" alt="" /></p>
<p>Dans l’application, vous allez ajouter un dossier App_Code. Ensuite, vous allez créer la classe Web API Controller dans ce dossier en faisant un clic droit sur celui-ci, puis en sélectionnant Add, et ensuite New Item :</p>
<p><img src="http://blog.developpez.com/media/appexplorer.png" width="688" height="424" alt="" /> </p>
<p>Dans la fenêtre de sélection du Template, vous verrez un nouveau Template « Web API Controller Class ».  Sélectionnez celui-ci, et renommez le fichier en vous assurant que le nom s’achève par « Controller ».  Puis cliquez sur « Add » :</p>
<p><img src="http://blog.developpez.com/media/appcontroller.png" width="668" height="537" alt="" /> </p>
<p>Un nouveau contrôleur Web API qui hérite de ApiController sera créé dans le dossier App_code avec des lignes de code par défaut illustrant comment vous pouvez créer des requêtes Get(), Post(), Put() et Delete() pour votre API.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 800px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">using</span> System;<br /><span style="color: #0000ff">using</span> System.Collections.Generic;<br /><span style="color: #0000ff">using</span> System.Linq;<br /><span style="color: #0000ff">using</span> System.Net.Http;<br /><span style="color: #0000ff">using</span> System.Web.Http;<br /><br /><span style="color: #0000ff">namespace</span> WebApplication1.App_Code.Controllers<br />{<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ValuesController : ApiController<br />    {<br />        <span style="color: #008000">// GET /api/&lt;controller&gt;</span><br />        <span style="color: #0000ff">public</span> IEnumerable&lt;<span style="color: #0000ff">string</span>&gt; Get()<br />        {<br />            <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> <span style="color: #0000ff">string</span>[] { <span style="color: #006080">&quot;value1&quot;</span>, <span style="color: #006080">&quot;value2&quot;</span> };<br />        }<br /><br />        <span style="color: #008000">// GET /api/&lt;controller&gt;/5</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Get(<span style="color: #0000ff">int</span> id)<br />        {<br />            <span style="color: #0000ff">return</span> <span style="color: #006080">&quot;value&quot;</span>;<br />        }<br /><br />        <span style="color: #008000">// POST /api/&lt;controller&gt;</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Post(<span style="color: #0000ff">string</span> <span style="color: #0000ff">value</span>)<br />        {<br />        }<br /><br />        <span style="color: #008000">// PUT /api/&lt;controller&gt;/5</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Put(<span style="color: #0000ff">int</span> id, <span style="color: #0000ff">string</span> <span style="color: #0000ff">value</span>)<br />        {<br />        }<br /><br />        <span style="color: #008000">// DELETE /api/&lt;controller&gt;/5</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Delete(<span style="color: #0000ff">int</span> id)<br />        {<br />        }<br />    }<br />}</pre>
<p></div>
<p>Pour ce billet,  on se limitera uniquement à l’utilisation du code généré. </p>
<p><strong>Exposer les fonctionnalités de l’API</strong></p>
<p>Vous allez maintenant définir une route pour WebAPI afin de pouvoir exposer les fonctionnalités de votre API.</p>
<p>Pour cela, vous allez ajouter les lignes de suivantes dans la méthode Application-Start du fichier Global.ascx.cs.</p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><span style="color: #0000ff;">void</span> Application_Start(<span style="color: #0000ff;">object</span> sender, EventArgs e)<br />        {<br />            <span style="color: #008000;">// Code that runs on application startup</span><br />            RouteTable.Routes.MapHttpRoute(<br />            name: <span style="color: #006080;">"DefaultApi"</span>,<br />              routeTemplate: <span style="color: #006080;">"api/{controller}/{id}"</span>,<br />              defaults: <span style="color: #0000ff;">new</span> { id = System.Web.Http.RouteParameter.Optional }<br />          );<br /><br />        }</pre>
<p></div>
<p>Vous devez également ajouter une référence à System.Web.Routing et System.Web.Http</p>
<p><img src="http://blog.developpez.com/media/appaddreference.png" width="698" height="275" alt="" /></p>
<p><strong>Consommer l’API</strong></p>
<p>Voyons maintenant comment vous pouvez consommer L’API créée.  Il est possible d&rsquo;appeler votre service en utilisant JavaScript, Ajax ou HttpClient.</p>
<p>Le script ci-dessous permet d’appeler le verbe Get pour lire les données en utilisant JavaScript.</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 500px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;script type=<span style="color: #006080">&quot;text/javascript&quot;</span>&gt;<br />    $(document).ready(<span style="color: #0000ff">function</span> () {<br />        <span style="color: #008000">// Envoi de la requête Ajax</span><br />          $.getJSON(<span style="color: #006080">&quot;api/values/&quot;</span>,<br />             <span style="color: #0000ff">function</span> (data) {<br />                <span style="color: #008000">// En cas de succès, 'data' contient la liste des clients.</span><br />                   $.each(data, <span style="color: #0000ff">function</span> (key, val) {<br />                    <span style="color: #0000ff">var</span> str = val;<br />                    $(<span style="color: #006080">'&lt;li/&gt;'</span>, { html: str }).appendTo($(<span style="color: #006080">'#getvalues'</span>));<br />                });<br />            });<br />    });<br />&lt;/script&gt;</pre>
<p></div>
<p>Les lignes ci-dessous seront utilisées pour afficher les informations retournées.   </p>
<div id="codeSnippetWrapper" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border: solid 1px silver; cursor: text; margin: 20px 0px 10px 0px; max-height: 200px; overflow: auto; padding: 4px; width: 97.5%; direction: ltr; text-align: left;">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;h1&gt;GET VALUES&lt;/h1&gt;<br />&lt;ul id=<span style="color: #006080;">'getvalues'</span> /&gt;<br /></pre>
<p></div>
<p>A l’exécution, vous allez obtenir le résultat suivant :</p>
<p>Nb : Si vous ne disposez pas d’ASP.NET MVC 4 beta, vous pouvez télécharger et installer séparément le package ASP.NET Web API via le gestionnaire de packages NuGet.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC 4 Bêta : premier pas avec ASP.NET Web API</title>
		<link>https://blog.developpez.com/lilroma/p10768/net/asp_net_mvc_4_beta_premier_pas_avec_asp_</link>
		<comments>https://blog.developpez.com/lilroma/p10768/net/asp_net_mvc_4_beta_premier_pas_avec_asp_#comments</comments>
		<pubDate>Wed, 29 Feb 2012 00:30:26 +0000</pubDate>
		<dc:creator><![CDATA[Hinault Romaric]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET MVC 4]]></category>
		<category><![CDATA[ASP.NET Web API]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans mon précédent billet de blog, j’ai présenté sommairement les nouveautés qui ont été introduites par ASP.NET MVC 4 bêta, la prochaine mise à jour majeure du framework Web open source de Microsoft. Aujourd’hui, je vais revenir sur l’une de &#8230; <a href="https://blog.developpez.com/lilroma/p10768/net/asp_net_mvc_4_beta_premier_pas_avec_asp_">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Dans mon<a href="http://blog.developpez.com/lilroma/p10734/"> précédent billet de blog</a>, j’ai présenté sommairement les nouveautés qui ont été introduites par ASP.NET MVC 4 bêta, la prochaine mise à jour majeure du framework Web open source de Microsoft.</p>
<p>Aujourd’hui, je vais revenir sur l’une de ces nouveautés les plus importantes à savoir : Web API. <strong>ASP.NET Web API</strong> a pour objectif principal de permettre aux développeurs d’exposer leurs applications, données et services sur le web directement à travers HTTP.</p>
<p>Le support d’ASP.NET Web API permet de créer facilement des API Web puissantes, qui peuvent être consultées à partir d’un large éventail de client (réseaux sociaux, navigateurs, terminaux mobiles, etc.). Web API fournit les fonctionnalités suivantes :</p>
<p><span id="more-77"></span></p>
<p>•  <strong>Modèle de programmation HTTP moderne</strong> : l’API Web permet d’accéder directement et manipuler les requêtes et réponses HTTP à l’aide d’un nouveau modèle objet HTTP fortement  typé. Le même modèle de programmation HTTP est pratiquement disponible sur le client par l’intermédiaire de HttpClient pouvant être utilisé pour appeler des API Web dans n’importe quelle application .NET.</p>
<p>•  <strong>Négociation de contenu</strong> : Le client et le serveur peuvent travailler ensemble afin de déterminer le bon format pour les données retournées à partir d’une API. Les formats pris en charge par défaut sont le XML et JSON. Le développeur pourra élargir ce soutien en ajoutant ses propres formats, ou même en remplaçant la stratégie de négociation du contenu par défaut.</p>
<p>•   <strong>Prise en charge complète des routes</strong> : l’API Web prend désormais en charge l’ensemble des fonctionnalités de route qui ont toujours été une partie de la pile Web, y compris les paramètres d’itinéraire et les contraintes. En outre, la cartographie des actions possède un support complet pour les conventions, de sorte que le développeur n’aura plus besoin d’appliquer des attributs à une classe ou méthode. La configuration de Web API se fait uniquement à travers le code.</p>
<p>•   <strong>Composition de requêtes</strong> : Web API permet de prendre rapidement en charge l’interrogation par l’intermédiaire des conventions URL OData. Lorsque le développeur retourne un type IQueryable de son API Web, le cadre fournira rapidement un soutien pour OData, rendant facile l’implémentation de la pagination et le tri.</p>
<p>•   <strong>Validation des modèles</strong> : Le modèle fournit un moyen facile d’extraire des données de diverses parties d’une requête HTTP et de convertir ces parties du message en objets .NET, qui peuvent être utilisés par des actions Web API. Web API offre le même support qu’ASP.NET MVC pour la liaison des modèles et l’infrastructure de validation.</p>
<p>•   <strong>Filtres</strong> : l’API Web permet de créer et utiliser facilement des filtres, qui permettent d’encapsuler et d’appliquer divers comportements.</p>
<p>•   <strong>Améliorations des tests</strong> : plutôt que de fixer des détails dans les objets de contexte HTTP statiques,  les actions Web API peuvent maintenant travailler avec les instances de HttpResquestMessage et HttpResponseMessage, deux nouveaux objets HTTP qui permettent d’effectuer plus facilement des tests.</p>
<p>•   <strong>Support de l’IoC</strong> : Web API prend en charge le modèle de service de localisation mis en œuvre par ASP.NET MVC, qui permet de résoudre les dépendances pour de nombreux dispositifs différents. Le développeur peut facilement intégrer cela avec un conteneur IoC, ou un cadre permettant l’injection de dépendances.</p>
<p>•   <strong>Flexibilité lors de l’hébergement</strong> : Web API peut être déployé dans n’importe quel type d’application ASP.NET (y compris à la fois ASP.NET MVC et ASP.NET Web Forms). Web API peut également être hébergé au sein de votre plateforme, si vous ne voulez pas utiliser ASP.NET/IIS pour le faire. Cela vous donne un maximum de flexibilité dans la façon dont vous l’utilisez.</p>
<p>Voyons de près quelques-unes de ces fonctionnalités au travers d’une application Web API.</p>
<p>Lors de la création d’un nouveau projet ASP.NET MVC 4, un nouveau modèle de projet est disponible dans les Templates par défaut qui fournit une implémentation basique d’une API Web.</p>
<p><img src="http://blog.developpez.com/media/SelectTemplate.png" width="679" height="573" alt="" /></p>
<p>Par défaut, un nouveau contrôleur Web API qui hérite de ApiController est disponible dans ce modèle de projet, qui illustre comment vous pouvez créer des requêtes Get(), Post(), Put() et Delete() pour votre API.</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ValuesController : ApiController<br />    {<br />        <span style="color: #008000">// GET /api/values</span><br />        <span style="color: #0000ff">public</span> IEnumerable&lt;<span style="color: #0000ff">string</span>&gt; Get()<br />        {<br />            <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> <span style="color: #0000ff">string</span>[] { <span style="color: #006080">&quot;value1&quot;</span>, <span style="color: #006080">&quot;value2&quot;</span> };<br />        }<br /><br />        <span style="color: #008000">// GET /api/values/5</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Get(<span style="color: #0000ff">int</span> id)<br />        {<br />            <span style="color: #0000ff">return</span> <span style="color: #006080">&quot;value&quot;</span>;<br />        }<br /><br />        <span style="color: #008000">// POST /api/values</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Post(<span style="color: #0000ff">string</span> <span style="color: #0000ff">value</span>)<br />        {<br />        }<br /><br />        <span style="color: #008000">// PUT /api/values/5</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Put(<span style="color: #0000ff">int</span> id, <span style="color: #0000ff">string</span> <span style="color: #0000ff">value</span>)<br />        {<br />        }<br /><br />        <span style="color: #008000">// DELETE /api/values/5</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Delete(<span style="color: #0000ff">int</span> id)<br />        {<br />        }<br />    }<br /></pre>
<p></div>
<p><strong>Support complet des routes</strong></p>
<p>Comme pour ASP.NET MVC, la définition des routes pour Web API est effectuée dans le fichier Global.ascx. Les routes pour Web API reprennent quasiment le même format que celle de MVC, afin que le développeur puisse capitaliser sur ses notions acquises.</p>
<p>En ouvrant donc le fichier Global.ascx,  la route suivante est définie par défaut pour l’API Web :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">routes.MapHttpRoute(<br />                name: <span style="color: #006080;">"DefaultApi"</span>,<br />                routeTemplate: <span style="color: #006080;">"api/{controller}/{id}"</span>,<br />                defaults: <span style="color: #0000ff;">new</span> { id = RouteParameter.Optional }<br />            );</pre>
<p></div>
<p>A la différence de MVC, la route est ajoutée dans MapHttpRoute() et  la méthode d’action n’est par définie dans le modèle de route. Ce qui implique que le développeur n’a pas besoins de spécifier une action. Web API identifie automatiquement la méthode du contrôleur qui sera exécutée en fonction du verbe HTTP qui est effectué (GET, POST, etc.).</p>
<p>Jetons un premier coup d’œil sur notre API Web en utilisant le contrôleur d’exemple (Values) inclus dans l’application pour avoir un aperçu du résultat qui est retourné.<br />
Il suffit d’exécuter l’application et renseigner dans la barre d’adresse du navigateur l’URL suivant : « …/api/Values ».</p>
<p>Le résultat qui est retourné au format XML est le suivant :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;"><br />&lt;ArrayOfString xmlns:xsi=<span style="color: #006080;">"http://www.w3.org/2001/XMLSchema-instance"</span> xmlns:xsd=<span style="color: #006080;">"http://www.w3.org/2001/XMLSchema"</span>&gt;<br />&lt;<span style="color: #0000ff;">string</span>&gt;value1&lt;/<span style="color: #0000ff;">string</span>&gt;<br />&lt;<span style="color: #0000ff;">string</span>&gt;value2&lt;/<span style="color: #0000ff;">string</span>&gt;<br />&lt;/ArrayOfString&gt;<br /></pre>
<p></div>
<p>Passons maintenant à un exemple plus concret qui présente comment mettre en œuvre simplement des actions CRUD avec ASP.NET Web API.  </p>
<p>Il est possible de créer un API controller avec par défaut les actions Read/Write. La boite de dialogue contient désormais un nouveau template pour la création d’un contrôleur qui hérite d’APIController avec des actions Read/Write.</p>
<p><img src="http://blog.developpez.com/media/createcontroller.png" width="601" height="395" alt="" /> </p>
<p>Lorsque l’on crée un contrôleur en utilisant ce modèle, il contient par défaut les actions Get, Post, Put et Delete tel que mentionné ci-haut.</p>
<p>Ces actions peuvent être modifiées comme suit pour exposer les fonctionnalités CRUD de l’application directement à travers HTTP.</p>
<div id="codeSnippetWrapper">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> CustomerController : ApiController<br />    {<br /><br />        <span style="color: #0000ff">private</span> CustomerRepository repository = <span style="color: #0000ff">new</span> CustomerRepository();<br /> <br />        <span style="color: #008000">// GET /api/customer</span><br />        <span style="color: #0000ff">public</span> IEnumerable&lt;Customer&gt; Get()<br />        {<br />        <br />           <span style="color: #0000ff">return</span> repository.GetAll();<br />        }<br /><br />        <span style="color: #008000">// GET /api/customer/5</span><br />        <span style="color: #0000ff">public</span> Customer Get(<span style="color: #0000ff">int</span> id)<br />        {<br />            var customer = repository.Single(id);<br /><br />           <span style="color: #0000ff">return</span> customer;<br />        }<br /><br />        <span style="color: #008000">// POST /api/customer</span><br />        <span style="color: #0000ff">public</span> HttpResponseMessage Post(Customer customer)<br />        {<br />            Int id = repository.Add(customer);<br /><br />            <span style="color: #008000">//spécification de l'emplacement du produit au Client REST</span><br />            var response = <span style="color: #0000ff">new</span> HttpResponseMessage(HttpStatusCode.Created);<br />            response.Headers.Location = <span style="color: #0000ff">new</span> Uri(<span style="color: #006080">&quot;/api/customer/&quot;</span> + id);<br /><br />            <span style="color: #0000ff">return</span> response;<br />        }<br /><br />        <span style="color: #008000">// PUT /api/customer/5</span><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> Put(<span style="color: #0000ff">int</span> id, Customer customer)<br />        {<br />            var customeri = repository.Single(id);<br /><br />            <span style="color: #0000ff">if</span> (customeri == <span style="color: #0000ff">null</span>)<br />                <span style="color: #008000">//Informe le client que la ressource n'existe pas</span><br />                <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> HttpResponseException(HttpStatusCode.NotFound);<br /><br />            repository.SaveChanges(customer);<br />        }<br /><br />        <span style="color: #008000">// DELETE /api/customer/5</span><br />        <span style="color: #0000ff">public</span> HttpResponseMessage Delete(<span style="color: #0000ff">int</span> id)<br />        {<br />            Customer customer = repository.Single(id);<br />            <br />            <span style="color: #0000ff">this</span>.repository.Delete(customer);<br />            <span style="color: #008000">//Confirmation de la suppression au client </span><br />            <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> HttpResponseMessage(HttpStatusCode.NoContent);<br />        }<br />    }<br /><br /></pre>
<p></div>
<p>Comme je l’ai signalé plus haut avec la négociation de contenu, Web API peut automatiquement sérialiser votre modèle aux différents formats qui sont supportés (JSON, XML, etc.) et ensuite écrire les données sérialisées dans le corps du message de la réponse HTTP. Le client peut desérialiser l’objet transmis par HTTP tant qu’il peut lire le format de sérialisation. La plupart des clients supportent par défaut le format XML et JSON. </p>
<p><strong>-  Appel du service avec JavaScript</strong></p>
<p>Voyons maintenant comment appeler le service en utilisant JavaScript. Le script ci-dessous permet d’appeler le verbe Get pour lire les données.</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">&lt;!DOCTYPE html&gt;<br />&lt;html lang=<span style="color: #006080;">"en"</span>&gt;<br />&lt;head&gt;<br />    &lt;title&gt;ASP.NET Web API&lt;/title&gt;<br />    &lt;script src=<span style="color: #006080;">"../../Scripts/jquery-1.6.2.min.js"</span> type=<span style="color: #006080;">"text/javascript"</span>&gt;&lt;/script&gt;<br />    &lt;script type=<span style="color: #006080;">"text/javascript"</span>&gt;<br />        $(document).ready(<span style="color: #0000ff;">function</span> () {<br />            <span style="color: #008000;">// Envoi de la requête Ajax</span><br />            $.getJSON(<span style="color: #006080;">"api/Customer/"</span>,<br />            <span style="color: #0000ff;">function</span> (data) {<br />                <span style="color: #008000;">// En cas de succès, 'data' contient la liste des clients.</span><br />                $.each(data, <span style="color: #0000ff;">function</span> (key, val) {<br /><br />                         <span style="color: #0000ff;">var</span> str = val.Id + <span style="color: #006080;">' '</span> + val.FirstName + <span style="color: #006080;">' '</span> + val.LastName;<br /><br />                         $(<span style="color: #006080;">'&lt;li/&gt;'</span>, { html: str }).appendTo($(<span style="color: #006080;">'#customers'</span>));<br />                });<br />            });<br />        });<br />    &lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />    &lt;div&gt;<br />        &lt;h1&gt;Customers&lt;/h1&gt;<br />        &lt;ul id=<span style="color: #006080;">'customers'</span> /&gt;<br />    &lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></pre>
<p></div>
<p>En remplaçant le code de la page Index.cshtml de mon application par celui ci-dessus, j’obtiens le résultat suivant dans mon navigateur :</p>
<p><img src="http://blog.developpez.com/media/testwebapi_01.png" width="514" height="327" alt="" /> </p>
<p>&#8211;  <strong>Utilisation de HttpClient</strong></p>
<p>Il est également possible d’utiliser la Classe HttpClient pour accéder à une WebAPI dans n’importe quelle application .NET (WebForms, MVC, WinForms, Console, etc.).  Elle permet d’effectuer avec souplesse des appels HTTP en utilisant les méthodes GetAsync, PostAsync, PutAsync, DeleteAsync qui vont appeler les verbes Get, Post, Put et Delete.</p>
<p>Exemple :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">HttpClient client = <span style="color: #0000ff;">new</span> HttpClient();<br />            client.DefaultRequestHeaders.Accept.Add(<span style="color: #0000ff;">new</span> MediaTypeWithQualityHeaderValue(<span style="color: #006080;">"application/xml"</span>));<br />            var response = client.GetAsync(<span style="color: #006080;">"http://localhost:1369/api/Customer"</span>).Result;<br /></pre>
<p></div>
<p>Pour spécifier que les données retournées doivent être au format JSON, on peut procéder comme suit :</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; font-family: 'Courier New', Courier, Monospace; font-size: 8pt; line-height: 12pt; border-style: none; color: black; overflow: visible; padding: 0px; width: 100%; margin: 0em; direction: ltr; text-align: left;">HttpClient client = <span style="color: #0000ff;">new</span> HttpClient();<br />            client.DefaultRequestHeaders.Accept.Add(<span style="color: #0000ff;">new</span> MediaTypeWithQualityHeaderValue(<span style="color: #006080;">"application/json"</span>));<br />            var response = client.GetAsync(<span style="color: #006080;">"http://localhost:1369/api/Customer"</span>).Result;<br /></pre>
<p></div>
<p>L’intégration d’ASP.NET Web API dans ASP.NET MVC 4 est vraiment fluide et permet au développeur de capitaliser sur ses acquis pour facilement exposer les fonctionnalités de son application via HTTP.</p>
<p>Ressources sur WebApi</p>
<p> &#8211; <a href="http://blogs.msdn.com/b/henrikn/">Henrik F Nielsen</a><br />
 &#8211; <a href="http://www.asp.net/web-api">Les ressources Web API sur ASP.NET</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
