asp.net-web-api
Routage URL Web API
Recherche…
Comment fonctionne le routage dans asp.net webapi
Dans l'API Web ASP.NET, un contrôleur est une classe qui gère les requêtes HTTP. Les méthodes publiques du contrôleur sont appelées méthodes d'action ou simplement actions.
Lorsque l'infrastructure de l'API Web reçoit une demande, elle achemine la demande vers une action. Pour déterminer quelle action appeler, le framework utilise une table de routage. Le modèle de projet Visual Studio pour Web API crée une route par défaut:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "**api/{controller}/{id}**",
defaults: new { id = RouteParameter.Optional }
);
Cette route est définie dans le fichier WebApiConfig.cs, qui est placé dans le répertoire App_Start:
Chaque entrée de la table de routage contient un modèle de route. Le modèle de route par défaut pour Web API est " api / {controller} / {id} ". Dans ce modèle, " api " est un segment de chemin littéral, et { controller } et { id } sont des variables d'espace réservé.
Lorsque l'infrastructure d'API Web reçoit une requête HTTP, elle tente de faire correspondre l'URI à l'un des modèles de route de la table de routage. Si aucune route ne correspond, le client reçoit une erreur 404.
Par exemple, les URI suivants correspondent à l'itinéraire par défaut:
- / api / valeurs
- / api / valeurs / 1
Cependant, l'URI suivant ne correspond pas, car il manque le segment " api ":
- / valeurs / 1
Une fois qu'un itinéraire correspondant est trouvé, Web API sélectionne le contrôleur et l'action:
- Pour trouver le contrôleur, Web API ajoute "Controller" à la valeur de la variable {controller}.
- Pour rechercher l'action, l'API Web examine la méthode HTTP, puis recherche une action dont le nom commence par ce nom de méthode HTTP. Par exemple, avec une requête GET, Web API recherche une action qui commence par "Get ...", par exemple "GetEmployee" ou "GetAllEmployees". Cette convention s'applique uniquement aux méthodes GET, POST, PUT et DELETE.
Vous pouvez activer d'autres méthodes HTTP en utilisant des attributs sur votre contrôleur. Nous en verrons un exemple plus tard.
- Les autres variables d'espace réservé dans le modèle de route, telles que {id}, sont mappées aux paramètres d'action.
Méthodes HTTP Au lieu d'utiliser la convention d'attribution de nom pour les méthodes HTTP, vous pouvez spécifier explicitement la méthode HTTP pour une action en décorant la méthode d'action avec l'attribut HttpGet, HttpPut, HttpPost ou HttpDelete.
Dans l'exemple suivant, la méthode EmployeeGetEmployee est mappée aux requêtes GET:
public class EmployeesController : ApiController
{
[HttpGet]
public EmployeeGetEmployee(id) {}
}
Pour autoriser plusieurs méthodes HTTP pour une action ou pour autoriser des méthodes HTTP autres que GET, PUT, POST et DELETE, utilisez l'attribut AcceptVerbs, qui prend une liste de méthodes HTTP.
public class EmployeesController: ApiController
{
[AcceptVerbs("GET", "HEAD")]
public Employee GetEmployee (id) { }
}
Nom du routage par action
Avec le modèle de routage par défaut, Web API utilise la méthode HTTP pour sélectionner l'action. Cependant, vous pouvez également créer un itinéraire où le nom de l'action est inclus dans l'URI:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Dans ce modèle de route, le paramètre {action} nomme la méthode d'action sur le contrôleur. Avec ce style de routage, utilisez des attributs pour spécifier les méthodes HTTP autorisées. Par exemple, supposons que votre contrôleur utilise la méthode suivante:
public class EmployeesController: ApiController
{
[HttpGet]
public List<Employee> GetAllEmployees();
}
Dans ce cas, une demande GET pour « api / Employees / GetAllEmployees » correspondrait à la méthode GetAllEmployees.
Vous pouvez remplacer le nom de l'action en utilisant l'attribut ActionName. Dans l'exemple suivant, deux actions correspondent à " api / Employees / ShowAllEmployees / id . L'une prend en charge GET et l'autre prend en charge POST:
public class EmployeesController : ApiController
{
[HttpGet]
[ActionName("ShowAllEmployees")]
public List<Employee> GetAll(int id);
[HttpPost]
[ActionName("ShowAllEmployees")]
public void GetAll (int id);
}
Non-actions
Nous pouvons empêcher une méthode d'être appelée en tant qu'action en utilisant l'attribut NonAction. Cela indique au framework que la méthode n'est pas une action, même si elle correspondrait aux règles de routage.
[NonAction]
public string GetValues() { ... }
Exemples de routage basés sur des verbes.
La même URL pour différentes méthodes http agit différemment. Ci-dessous, un tableau représentant le même.
| VERBE HTTP | URL | LA DESCRIPTION |
|---|---|---|
| OBTENIR | / api / étudiants | Retourne tous les étudiants |
| OBTENIR | / api / étudiants / 5 | Retourne les détails de l'id de l'étudiant = 5 |
| POSTER | / api / étudiants | Ajouter un nouvel étudiant |
| METTRE | / api / étudiants / 5 | Mettre à jour l'élève avec Id = 5 |
| EFFACER | / api / étudiants / 5 | Supprimer l'élève avec Id = 5 |