Utilisation de l’API web avec ASP.NET Web Forms

par Mike Wasson

Ce tutoriel vous guide tout au long des étapes d’ajout de l’API web à une application ASP.NET Web Forms traditionnelle dans ASP.NET 4.x.

Vue d’ensemble

Bien que API Web ASP.NET soit empaqueté avec ASP.NET MVC, il est facile d’ajouter une API web à une application ASP.NET Web Forms traditionnelle.

Pour utiliser l’API web dans une application Web Forms, il existe deux étapes main :

  • Ajoutez un contrôleur d’API web qui dérive de la classe ApiController .
  • Ajoutez une table de routage à la méthode Application_Start .

Créer un projet Web Forms

Démarrez Visual Studio et sélectionnez Nouveau projet dans la page Démarrer . Ou, dans le menu Fichier , sélectionnez Nouveau , puis Projet.

Dans le volet Modèles , sélectionnez Modèles installés et développez le nœud Visual C# . Sous Visual C#, sélectionnez Web. Dans la liste des modèles de projet, sélectionnez ASP.NET Web Forms Application. Entrez un nom pour le projet, puis cliquez sur OK.

Capture d’écran du volet nouveau modèle de projet, montrant les options de menu disponibles pour la création du formulaire d’application web A SP dot NET.

Créer le modèle et le contrôleur

Ce didacticiel utilise les mêmes classes de modèle et de contrôleur que le didacticiel Prise en main.

Tout d’abord, ajoutez une classe de modèle. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet et sélectionnez Ajouter une classe. Nommez la classe Product et ajoutez l’implémentation suivante :

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public string Category { get; set; }
}

Ensuite, ajoutez un contrôleur d’API web au projet. Un contrôleur est l’objet qui gère les requêtes HTTP pour l’API web.

Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet. Sélectionnez Ajouter un nouvel élément.

Capture d’écran des options de menu de l’Explorateur de solutions, montrant un guide visuel pour ajouter un nouvel élément de projet.

Sous Modèles installés, développez Visual C# et sélectionnez Web. Ensuite, dans la liste des modèles, sélectionnez Classe de contrôleur d’API web. Nommez le contrôleur « ProductsController », puis cliquez sur Ajouter.

Capture d’écran montrant comment ajouter un nouvel élément web en tant que classe de contrôleur A IP web, en l’étiquetant Contrôleur de produit dans le champ nom.

L’Assistant Ajout d’un nouvel élément crée un fichier nommé ProductsController.cs. Supprimez les méthodes incluses par l’Assistant et ajoutez les méthodes suivantes :

namespace WebForms
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;

    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;
        }

        public Product GetProductById(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return product;
        }

        public IEnumerable<Product> GetProductsByCategory(string category)
        {
            return products.Where(
                (p) => string.Equals(p.Category, category,
                    StringComparison.OrdinalIgnoreCase));
        }
    }
}

Pour plus d’informations sur le code de ce contrôleur, consultez le tutoriel Prise en main.

Ajouter des informations de routage

Ensuite, nous allons ajouter un itinéraire d’URI afin que les URI de la forme « /api/products/ » soient routés vers le contrôleur.

Dans Explorateur de solutions, double-cliquez sur Global.asax pour ouvrir le fichier code-behind Global.asax.cs. Ajoutez l’instruction using suivante.

using System.Web.Http;

Ajoutez ensuite le code suivant à la méthode Application_Start :

RouteTable.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = System.Web.Http.RouteParameter.Optional }
);

Pour plus d’informations sur les tables de routage, consultez Routage dans API Web ASP.NET.

Ajouter Client-Side AJAX

C’est tout ce dont vous avez besoin pour créer une API web à laquelle les clients peuvent accéder. Nous allons maintenant ajouter une page HTML qui utilise jQuery pour appeler l’API.

Vérifiez que votre page master (par exemple, Site.Master) inclut un ContentPlaceHolder avec ID="HeadContent":

<asp:ContentPlaceHolder runat="server" ID="HeadContent"></asp:ContentPlaceHolder>

Ouvrez le fichier Default.aspx. Remplacez le texte réutilisable qui se trouve dans la section de contenu main, comme indiqué :

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" 
    AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebForms._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>Products</h2>
    <table>
    <thead>
        <tr><th>Name</th><th>Price</th></tr>
    </thead>
    <tbody id="products">
    </tbody>
    </table>
</asp:Content>

Ensuite, ajoutez une référence au fichier source jQuery dans la HeaderContent section :

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    <script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</asp:Content>

Remarque : Vous pouvez facilement ajouter la référence de script en faisant glisser-déplacer le fichier de Explorateur de solutions dans la fenêtre de l’éditeur de code.

Captures d’écran des fenêtres de l’explorateur de solutions et de l’éditeur de code, utilisant une flèche verte pour indiquer où déposer le script dans le code.

Sous la balise de script jQuery, ajoutez le bloc de script suivant :

<script type="text/javascript">
    function getProducts() {
        $.getJSON("api/products",
            function (data) {
                $('#products').empty(); // Clear the table body.

                // Loop through the list of products.
                $.each(data, function (key, val) {
                    // Add a table row for the product.
                    var row = '<td>' + val.Name + '</td><td>' + val.Price + '</td>';
                    $('<tr/>', { html: row })  // Append the name.
                        .appendTo($('#products'));
                });
            });
        }

        $(document).ready(getProducts);
</script>

Lorsque le document se charge, ce script effectue une requête AJAX à « api/products ». La demande retourne une liste de produits au format JSON. Le script ajoute les informations de produit à la table HTML.

Lorsque vous exécutez l’application, elle doit ressembler à ceci :

Capture d’écran du navigateur web affichant l’étiquette, les noms et les prix des produits, sous forme d’exemple pour représenter ce à quoi il doit ressembler.