Lorsque nous apprendrons dans une certaine mesure, nous voudrons comprendre les éléments sous-jacents du code en profondeur, et nous voudrons également avoir notre propre cadre. Bien sûr, c'est aussi le cas pour les blogueurs. Cet article peut être le début de l’écriture d’un framework webapi. Les amis qui ont étudié le framework MVC découvriront que le routage MvcRouteHandler du framework MVC implémente IRouteHandler pour implémenter notre routage, et IRouteHandler n'a besoin de renvoyer qu'un seul objet, qui est IHttpHandler, et IHttphandler gère les requêtes http. Avec joie, nous avons constaté que nous disposions déjà des éléments essentiels pour l'écriture d'une webapi, le routage et le traitement des requêtes. Peut-être que cette série d'articles n'expliquera pas en profondeur ce que sont ces deux choses, mais se concentrera sur leur utilisation. Les amis intéressés peuvent en apprendre davantage par eux-mêmes, ce qui sera d'une grande aide pour comprendre le traitement des requêtes réseau sous .net.
Sans plus tarder, commençons directement
Nous créons directement un projet web asp.net complètement vide
Décochez n'importe quoi.
Ensuite, on ajoute un BaseRouteHandler, hérité de (implémentation) IRouteHandler, le code est le suivant
public class BaseRouteHandler:IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { return new BaseHttpHandler(); } }
On voit qu'un BaseHttphandler, ceci est écrit par nous-mêmes
Créez un nouveau BaseHttpHandler pour implémenter IHttpHandler. Il convient de noter que si vous avez besoin de ce gestionnaire pour gérer les sessions, il vous suffit d'hériter de IRequiresSessionState. ne nécessite aucune implémentation
public class BaseHttpHandler:IHttpHandler { public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { var request = context.Request; var response = context.Response; var method = request.HttpMethod.ToLower(); var result = string.Empty; result = string.Format("您正在请求BaseHttpHandler,请求方式是{0},queryStr={1}", method,request.QueryString); response.ContentType = "application/json"; response.Write(result); response.End(); } }
IHttpHander n'a que deux choses, l'une est IsResuable, l'attribut IsReusable, MSDN l'explique comme ceci : Obtenez une valeur qui indique si d'autres requêtes peuvent utiliser IHttpHandler exemple . C'est-à-dire que les requêtes Http ultérieures peuvent continuer à utiliser des instances de classes qui implémentent cette interface. Ici, nous la définissons sur false car nous n'avons plus besoin d'hériter de ce gestionnaire
L'autre est ProcessRequest, c'est le cas. Pour traiter des requêtes spécifiques, HttpContext contient divers paramètres de notre requête http. Il nous suffit de traiter les données de contexte.
Avant d'accéder, nous devons enregistrer l'itinéraire
Nous ajoutons une classe d'application globale globale au programme, supprimons toutes les méthodes à l'exception de la méthode Application_Start, puis écrivons le code suivant
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(new Route("api", new BaseRouteHandler())); } }
À ce stade, le projet peut fonctionner normalement, nous le compilons donc et l'exécutons anxieusement, saisissons l'adresse
Remarque Oh, puisque notre route est enregistrée avec l'API, l'ajout de la route de /api après la barre d'adresse de notre projet peut envoyer des requêtes normales à notre HttpRouteHandler personnalisé.
Ainsi, nous avons appris qu'il y a trois points les plus fondamentaux :
1. Implémenter IRouterHandler,
2. Implémenter IHttpHandler,
3. Enregistrer l'itinéraire
Si vous avez des démangeaisons, alors allez mettre en œuvre votre propre framework !
A suivre. . .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!