Wenn wir bis zu einem gewissen Grad lernen, möchten wir die zugrunde liegenden Dinge des Codes gründlich verstehen und auch über ein eigenes Framework verfügen. Dies gilt natürlich auch für Blogger. Dieser Artikel könnte der Beginn des Schreibens eines Webapi-Frameworks sein. Freunde, die das MVC-Framework studiert haben, werden feststellen, dass der Routing-MvcRouteHandler des MVC-Frameworks IRouteHandler implementiert, um unser Routing zu implementieren, und IRouteHandler nur ein Objekt zurückgeben muss, nämlich IHttpHandler, und IHttphandler verarbeitet http-Anfragen. Mit Freude stellten wir fest, dass wir bereits über die Kernelemente für das Schreiben eines Webapi, das Routing und die Bearbeitung von Anfragen verfügen. Vielleicht wird diese Artikelserie nicht im Detail erklären, was diese beiden Dinge sind, sondern sich auf ihre Verwendung konzentrieren. Interessierte Freunde können sich selbst darüber informieren, was für das Verständnis der Netzwerkanfrageverarbeitung unter .net von großem Nutzen sein wird.
Ohne weitere Umschweife fangen wir direkt an
Wir erstellen direkt ein komplett leeres asp.net-Webprojekt
Deaktivieren Sie alles.
Dann fügen wir einen BaseRouteHandler hinzu, der von (Implementierung) IRouteHandler geerbt wurde. Der Code lautet wie folgt:
public class BaseRouteHandler:IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { return new BaseHttpHandler(); } }
Wir sehen, dass a BaseHttphandler, der von uns selbst geschrieben wurde
Erstellen Sie einen neuen BaseHttpHandler, um IHttpHandler zu implementieren. Beachten Sie, dass Sie nur IRequiresSessionState erben müssen erfordert keine Implementierung
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 hat nur zwei Dinge, eines ist IsResuable, IsReusable-Attribut, MSDN erklärt es so: Rufen Sie einen Wert ab, der angibt, ob andere Anforderungen den IHttpHandler verwenden können Instanz. Mit anderen Worten: Nachfolgende HTTP-Anfragen können weiterhin Instanzen von Klassen verwenden, die diese Schnittstelle implementieren. Hier setzen wir sie auf false, da wir diesen Handler nicht mehr erben müssen.
Der andere ist ProcessRequest, das ist To Um spezifische Anfragen zu verarbeiten, enthält HttpContext verschiedene Parameter unserer http-Anfrage. Wir müssen nur die Kontextdaten verarbeiten.
Vor dem Zugriff müssen wir die Route registrieren
Wir fügen dem Programm eine globale globale Anwendungsklasse hinzu, löschen alle Methoden außer der Application_Start-Methode und schreiben dann den folgenden Code
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(new Route("api", new BaseRouteHandler())); } }
Zu diesem Zeitpunkt kann das Projekt normal ausgeführt werden, daher kompilieren und führen wir es ängstlich aus und geben die Adresse ein
Hinweis Oh, da unsere Route bei der API registriert ist, kann das Hinzufügen der /api-Route nach der Adressleiste unseres Projekts normalerweise eine Anfrage an unseren benutzerdefinierten HttpRouteHandler stellen.
Wir haben also gelernt, dass es drei grundlegendste Punkte gibt:
1. IRouterHandler implementieren,
2. IHttpHandler implementieren,
3. Route registrieren
Wenn es Sie juckt, dann setzen Sie Ihr eigenes Framework um!
Fortsetzung folgt. . .
Das obige ist der detaillierte Inhalt vonDer Beginn des Schreibens eines Webapi-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!